python – 在Pandas中使用Apply使用多个if语句的Lambda函数
发布时间:2020-12-20 12:13:52 所属栏目:Python 来源:网络整理
导读:我试图根据像这样的数据框中的人的大小来推断分类: Size1 800002 80000003 8000000000... 我希望它看起来像这样: Size Classification1 80000 1m2 8000000 1-10m3 8000000000 1bi... 我理解理想的过程是应用这样的lambda函数: df['Classification']=df['S
我试图根据像这样的数据框中的人的大小来推断分类:
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函数中的多个ifs的帖子,here is an example link,但是这个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函数内多个if语句的正确synthax的任何建议?多线或单线解决方案对我有用. 解决方法
这是一个可以构建的小例子:
基本上,lambda x:x ..是函数的短单行.真正需要的是一个你可以轻松重建的功能. import pandas as pd # Recreate the dataframe data = dict(Size=[80000,8000000,800000000]) df = pd.DataFrame(data) # Create a function that returns desired values # You only need to check upper bound as the next elif-statement will catch the value def func(x): if x < 1e6: return "<1m" elif x < 1e7: return "1-10m" elif x < 5e7: return "10-50m" else: return 'N/A' # Add elif statements.... df['Classification'] = df['Size'].apply(func) print(df) 返回: Size Classification 0 80000 <1m 1 8000000 1-10m 2 800000000 N/A (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |