为什么我的Pandas的“应用”功能不能引用多个列?

当将多个列与以下数据框一起使用时,Pandas Apply函数存在一些问题

df = DataFrame ({'a' : np.random.randn(6),

'b' : ['foo', 'bar'] * 3,

'c' : np.random.randn(6)})

和以下功能

def my_test(a, b):

return a % b

当我尝试使用以下功能时:

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')

我不明白此消息,我正确定义了名称。

非常感谢你在此问题上的任何帮助

更新资料

谢谢你的帮助。我确实在代码中犯了一些语法错误,索引应该放在’‘。但是,使用更复杂的功能仍然会遇到相同的问题,例如:

def my_test(a):

cum_diff = 0

for ix in df.index():

cum_diff = cum_diff + (a - df['a'][ix])

return cum_diff

回答:

似乎你忘记了''你的字符串。

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

In [44]: df

Out[44]:

a b c 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)

以上是 为什么我的Pandas的“应用”功能不能引用多个列? 的全部内容, 来源链接: utcz.com/qa/406141.html

回到顶部