我试着根据像这样的数据框中一个人的大小推断出一个分类:
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函数here is an example link中多个ifs的帖子,但是synthax在多个ifs语句中由于某些原因不适合我,但它在一个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)
计算出“pass”似乎也不适用于lambda函数:
df['Classification']=df['Size'].apply(lambda x: "<1m" if x<1000000 else pass)
SyntaxError: invalid syntax
对于Pandas中apply方法中lambda函数中的multiple if语句,有什么关于synthax的正确建议吗?不管是多行还是单行解决方案对我都有效。
下面是一个小示例,您可以在此基础上进行构建:
基本上,
lambda x: x..
是函数的短一行。apply真正需要的是一个功能,您可以轻松地重新创建自己。返回:
您可以使用^{} function :
使用Numpy的
searchsorted
如果要在现有数据帧中生成新列
一些解释
来自Docs:^{}
labels
数组的长度比bins
数组的长度大一倍。因为当某个值大于bins
中的最大值时,searchsorted
返回-1
。当我们切片labels
时,这将获取最后一个标签。相关问题 更多 >
编程相关推荐