如何在Pandas中给apply函数传入列与外部变量参数?
在Pandas Apply中传递外部参数的解决方案
没问题,这其实很容易解决!Pandas的apply方法本身就支持传递额外的外部参数,这里有两种常用且清晰的实现方式,结合你的代码示例给你演示:
方法1:使用apply的args参数
你可以直接利用apply自带的args参数,把外部变量以元组的形式传递给自定义函数。需要先改造你的函数,增加对应的参数:
import pandas as pd data_dict = {'a':[-2,5,4,-6], 'b':[4,4,5,-8]} # 建议不要用dict作为变量名,避免覆盖内置类型 df = pd.DataFrame(data_dict) # 改造函数,新增外部参数multiplier def DummyFunction(row, multiplier): return row['a'] * row['b'] * multiplier # 定义你的外部变量 external_multiplier = 2 # 通过args传递外部参数,注意元组单元素要加逗号 df['Dummy1'] = df.apply(DummyFunction, axis=1, args=(external_multiplier,)) print(df)
说明:
args接受一个元组,里面的元素会按顺序传递给函数中除了row之外的参数- 如果有多个外部参数,只需要扩展元组即可,比如
args=(var1, var2),同时函数也要对应增加参数
方法2:用Lambda函数做中间包装
如果你觉得args的写法不够直观,也可以用lambda函数作为中间层,把row和外部变量一起传递给自定义函数:
import pandas as pd data_dict = {'a':[-2,5,4,-6], 'b':[4,4,5,-8]} df = pd.DataFrame(data_dict) def DummyFunction(row, multiplier): return row['a'] * row['b'] * multiplier external_multiplier = 2 # 用lambda包装,传递row和外部变量 df['Dummy1'] = df.apply(lambda row: DummyFunction(row, external_multiplier), axis=1) print(df)
说明:
- lambda在这里起到了“适配器”的作用,把
apply默认传递的row参数,和你需要的外部变量一起传给目标函数 - 这种写法在参数较多或者需要调整参数顺序时,可读性会更好
两种方法都能完美解决你的问题,你可以根据自己的习惯选择其中一种~
内容的提问来源于stack exchange,提问作者M_Idk392845
相关产品推荐
相关产品推荐

