为什么我的Pandas的'apply'函数不能引用多列?[已关闭]

47 浏览
0 Comments

为什么我的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日
0
0 Comments

如果您只想计算(column a) % (column b),您不需要使用apply,直接进行计算即可:\n\n

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

0
0 Comments

看起来您忘记了字符串中的引号''

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)

0