如何将DataFrame指定列作为参数,对多列批量应用自定义函数
错误原因
- 按
axis=1调用apply时,传入自定义函数的第一个参数是当前行的完整Series对象,不是你以为的单个day列的值 - 你传入的
j=df['argument']是完整的argument列,不是当前行对应的argument数值 - 你最后写的测试函数逻辑是
i-j,和你需要的乘法逻辑不匹配
解决方案
方案1:利用pandas广播特性直接运算(100+列场景下效率最高,推荐)
直接筛选出所有需要处理的列,和argument列按行对齐做运算即可:
import pandas as pd # 示例数据 df = pd.DataFrame({'argument':[1,2,0.5], 'day1':[4,5,6], 'day2':[5,1,2]}) # 筛选除了argument之外的所有目标列 target_cols = [col for col in df.columns if col != 'argument'] # 逐行乘以argument列的值 df[target_cols] = df[target_cols].mul(df['argument'], axis=0)
方案2:自定义函数适配apply(适合业务逻辑复杂的场景)
如果你的实际业务逻辑无法用内置运算实现,需要自定义函数,写法如下:
# 你的自定义业务函数,这里以乘法为例 def custom_calc(val, arg): # 这里可以替换成你的复杂业务逻辑 return val * arg # 对所有目标列应用自定义函数,自动传入当前行对应的argument值 target_cols = [col for col in df.columns if col != 'argument'] df[target_cols] = df[target_cols].apply(lambda x: custom_calc(x, df['argument']), axis=0)
两种方案运行后都可以得到你期望的输出:
argument day1 day2 0 1.0 4.0 5.0 1 2.0 10.0 2.0 2 0.5 3.0 1.0
内容的提问来源于stack exchange,提问作者LGelb
相关产品推荐
相关产品推荐

