pandas:如何将应用函数用于多列

在使用多列与下面的数据框时,pandas应用函数有一些问题

df = DataFrame ({'a' : np.random.randn(6), 'b' : ['foo', 'bar'] * 3, 'c' : np.random.randn(6)}) 

和以下function

 def my_test(a, b): return a % b 

当我尝试应用这个function:

 df['Value'] = df.apply(lambda row: my_test(row[a], row[c]), axis=1) 

我收到错误消息:

 NameError: ("global name 'a' is not defined", u'occurred at index 0') 

我不明白这个消息,我正确定义了这个名字。

我非常感谢在这个问题上的任何帮助

更新

谢谢你的帮助。 我确实在代码中犯了一些语法错误,索引应该放在''。 不过,我仍然使用一个更复杂的function相同的问题,如:

 def my_test(a): cum_diff = 0 for ix in df.index(): cum_diff = cum_diff + (a - df['a'][ix]) return cum_diff 

谢谢

似乎你忘记了你的string。

 In [43]: df['Value'] = df.apply(lambda row: my_test(row['a'], row['c']), axis=1) In [44]: df Out[44]: abc Value 0 -1.674308 foo 0.343801 0.044698 1 -2.163236 bar -2.046438 -0.116798 2 -0.199115 foo -0.458050 -0.199115 3 0.918646 bar -0.007185 -0.001006 4 1.336830 foo 0.534292 0.268245 5 0.976844 bar -0.773630 -0.570417 

顺便说一句,在我看来,下面的方式更优雅:

 In [53]: def my_test2(row): ....: return row['a'] % row['c'] ....: In [54]: df['Value'] = df.apply(my_test2, axis=1) 

如果你只是想计算(列a)%(列b),你不需要apply ,直接做:

 In [7]: df['a'] % df['c'] Out[7]: 0 -1.132022 1 -0.939493 2 0.201931 3 0.511374 4 -0.694647 5 -0.023486 Name: a 

假设我们想要将函数add5应用于DataFrame df的列“a”和“b”

 def add5(x): return x+5 df[['a', 'b']].apply(add5)