如何在Python中按列名自动匹配参数为DataFrame行应用函数?
Python中实现类似R的pmap自动匹配函数参数的方法
你可以利用pandas的apply结合**字典解包的方式,让函数自动匹配列名对应的参数,无需手动指定每个参数。具体实现如下:
方法1:apply配合字典解包
由于apply传入的row对象可转换为字典(row.to_dict()),使用**将字典解包为函数的关键字参数后,函数会自动根据参数名匹配对应的列值:
df['result_f1'] = df.apply(lambda row: f1(**row.to_dict()), axis='columns') df['result_f2'] = df.apply(lambda row: f2(**row.to_dict()), axis='columns')
运行后得到的结果:
print(df) # A B C result_f1 result_f2 # 0 1 2 3 4 1 # 1 4 5 6 10 1 # 2 7 8 9 16 1
这种方式不需要手动指定每个参数,只要函数参数名和DataFrame列名一致,就能自动完成匹配。
方法2:封装通用工具函数
如果需要多次调用不同函数,可以封装一个通用函数,减少重复代码:
def apply_func(df, func): return df.apply(lambda row: func(**row.to_dict()), axis='columns') # 调用示例 df['result_f1'] = apply_func(df, f1) df['result_f2'] = apply_func(df, f2)
补充说明
虽然apply的效率不如向量化操作,但如果函数逻辑复杂、暂时无法实现向量化,这种方式既能保证代码简洁,又能保留原有函数定义便于调试,和R语言中pmap的使用逻辑一致。
内容的提问来源于stack exchange,提问作者Yann
相关产品推荐
相关产品推荐

