【发布时间】:2019-10-18 16:44:36
【问题描述】:
pandas 中是否有一种方法可以使用列名作为参数名将函数应用于数据框?例如,我有一个函数和一个数据框。
df = pd.DataFrame({'A':[1,2,3],
'B':[1,2,3],
'C':[1,2,3],
'D':[1,2,3]})
def f(A,B,C):
#Pretend code is more complicated
return A + B + C
有没有办法让我做类似的事情
df.apply(f)
让 pandas 将列与命名参数匹配?
我知道我可以重写函数以获取一行而不是命名参数,但请记住 f 只是一个玩具示例,我的实际函数更复杂
编辑:
根据@juanpa.arrivillaga 的答案想出来:
df[list(f.__code__.co_varnames)].apply((lambda row: f(**row)), axis=1)
【问题讨论】:
-
?df.eval('A+B+C')
-
有没有办法做到这一点而不必重写函数 f?
-
函数 f 只是一个玩具示例。我的真正功能更复杂。
-
明确地使用示例函数可能更有帮助。
-
现在,您的
apply正在按列执行。在这种情况下,将它传递给你所拥有的系列更为合乎逻辑。您可以按行进行操作,但老实说,在大多数情况下,您可以避免使用 apply 循环以支持矢量化操作。
标签: python pandas dataframe apply