【发布时间】:2021-07-23 11:43:00
【问题描述】:
我有许多 pandas 数据框,它们的列数和列名不同,但包含相似的数据(1 和 0)。我想应用一个适用于所有这些数据帧的函数。
这是一个简单的例子:
构建数据框:
data = {'A':[1,2,3], 'B':[4,5,6], 'C':[7,8,9]}
df = pd.DataFrame(data)
定义函数:
def my_fn(a, b, c):
ans = a * b * c
return ans
将函数应用于数据框:
df.apply(lambda x: my_fn(x.A, x.B, x.C), axis=1)
问题:这当然可行,但如果下一个数据框有 5 列(A、B、C、D、E)怎么办?我的函数应该是 my_fn(a, b, c, d, e)。我可能有 1000 个数据框需要像这样处理,列数不同。
我使用 Exec() 的尝试:
my_cols = list(df.columns)
my_cols = ['x.' + item for item in my_cols]
args_str = ', '.join(my_cols) #This gives--> 'x.A, x.B, x.C, x.D, x.E'
df.apply(lambda x: exec(my_fn(args_str)), axis=1)
结果: TypeError:my_fn() 缺少 4 个必需的位置参数:'b'、'c'、'd' 和 'e'
进一步的想法:
我阅读了其他类似的帖子并建议使用字典,但在我看来,这些问题完全不同。也许我完全以错误的方式解决了这个问题(很可能)。或者也许有一个我没有想到的简单解决方案(更有可能)。有人可以帮忙吗?
【问题讨论】:
标签: python pandas lambda apply