【发布时间】:2018-07-30 01:06:41
【问题描述】:
我正在尝试根据这样的数据框中的人的大小来推断分类:
Size
1 80000
2 8000000
3 8000000000
...
我希望它看起来像这样:
Size Classification
1 80000 <1m
2 8000000 1-10m
3 8000000000 >1bi
...
我知道理想的过程是应用这样的 lambda 函数:
df['Classification']=df['Size'].apply(lambda x: "<1m" if x<1000000 else "1-10m" if 1000000<x<10000000 else ...)
我查看了几篇关于 lambda 函数中的多个 if 的帖子,here is an example link,但由于某种原因,该合成器在多个 if 语句中对我不起作用,但它在单个 if 条件下工作。
所以我尝试了这个“非常优雅”的解决方案:
df['Classification']=df['Size'].apply(lambda x: "<1m" if x<1000000 else pass)
df['Classification']=df['Size'].apply(lambda x: "1-10m" if 1000000 < x < 10000000 else pass)
df['Classification']=df['Size'].apply(lambda x: "10-50m" if 10000000 < x < 50000000 else pass)
df['Classification']=df['Size'].apply(lambda x: "50-100m" if 50000000 < x < 100000000 else pass)
df['Classification']=df['Size'].apply(lambda x: "100-500m" if 100000000 < x < 500000000 else pass)
df['Classification']=df['Size'].apply(lambda x: "500m-1bi" if 500000000 < x < 1000000000 else pass)
df['Classification']=df['Size'].apply(lambda x: ">1bi" if 1000000000 < x else pass)
发现“通过”似乎也不适用于 lambda 函数:
df['Classification']=df['Size'].apply(lambda x: "<1m" if x<1000000 else pass)
SyntaxError: invalid syntax
对于 Pandas 的 apply 方法中的 lambda 函数内的多重 if 语句的正确语法有什么建议吗?多线或单线解决方案都适合我。
【问题讨论】:
-
你可以只使用一个函数。
-
这看起来像@AntonvBR?
-
@abutremutante 编写一个函数来完成这项工作并将名称作为参数传递给应用。
-
你看过pd.cut或categories吗?
标签: python pandas if-statement lambda apply