如何用列名列表向Pandas的apply()传递多列参数?
解决方案
当然可以用列名列表来简化代码,不用逐个手动输入列名。具体实现方式如下:
- 定义目标列名列表:把需要传入函数的列名(比如A到J)存入一个列表
- 在apply中通过序列解包传入参数:利用
*操作符,把列表对应列的行值拆成单个参数传入函数
示例代码:
# 定义包含A到J列的列表 target_cols = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'] # 用apply批量传入列值到myfunction df['H'] = df.apply(lambda x: myfunction(*x[target_cols]), axis=1)
原理说明
x[target_cols]会按列表顺序提取当前行中对应列的值,返回一个有序的序列*操作符将这个序列拆分为独立的参数,正好匹配myfunction需要的多个输入参数(对应原写法里的x.A、x.B等)
额外提示
- 如果你的
myfunction本身支持接收可迭代对象(比如列表)作为参数,也可以直接传入x[target_cols],无需添加* - 确保
target_cols中的所有列名都存在于DataFrame中,否则会触发KeyError
内容的提问来源于stack exchange,提问作者Zain
相关产品推荐
相关产品推荐

