如何在DataFrame的apply方法中使用接收3个参数的lambda函数?
解决Lambda函数应用于DataFrame多列时的参数缺失问题
错误原因
直接对df[['a','aa','aaa']]调用.apply()时,默认按列(axis=0)处理,每一次只会把单列数据传给lambda函数,但你的lambda需要3个位置参数,因此触发参数缺失错误。
解决方案
要实现按行提取三列数据传入lambda,需要指定axis=1让apply按行处理,有两种常用写法:
方法1:复用已定义的lambda函数
修改apply调用,按行处理并手动提取每行的三个列值传入funct:
import pandas as pd # 你的原lambda函数 funct = (lambda a,aa,aaa: (a-aa)/aaa if aa>0 else a/aaa) # 构造示例DataFrame df = pd.DataFrame({'a': [200, 150], 'aa': [100, 0], 'aaa': [2, 3]}) # 按行应用,提取每行的三个列值传入funct result = df.apply(lambda row: funct(row['a'], row['aa'], row['aaa']), axis=1) print(result)
方法2:直接在apply中写逻辑(更简洁)
不需要单独定义funct,直接把逻辑写在apply的lambda里:
import pandas as pd df = pd.DataFrame({'a': [200, 150], 'aa': [100, 0], 'aaa': [2, 3]}) result = df.apply(lambda row: (row['a']-row['aa'])/row['aaa'] if row['aa']>0 else row['a']/row['aaa'], axis=1) print(result)
两种方法输出结果一致:
0 50.0 1 50.0 dtype: float64
内容的提问来源于stack exchange,提问作者PRNCSS
相关产品推荐
相关产品推荐

