为什么我的Pandas的'apply'函数不能引用多列?[已关闭]
为什么我的Pandas的'apply'函数不能引用多列?[已关闭]
已关闭。此问题无法复现或由输入错误引起。它目前不接受答案。
此问题是由于输入错误或无法再现而引起的。虽然类似的问题可能在此处属于相关主题,但这个问题以一种不太可能有助于未来读者的方式得到解决。
改善此问题
我在使用以下数据框时,在 Pans 应用函数时遇到了一些问题:
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
admin 更改状态以发布 2023年5月23日
看起来您忘记了字符串中的引号''
。
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)