pandas :如何使用应用功能到多个列 [英] Pandas: How to use apply function to multiple columns

查看:127
本文介绍了 pandas :如何使用应用功能到多个列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在pandas应用功能上有一些问题,当使用具有以下数据框架的多个列

  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:(全局名称a'未定义,您在索引0'中出现)

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



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



更新



感谢您的帮助。我确实有一些语法错误与代码,索引应该放在''。然而,我仍然使用一个更复杂的功能,如:

  def my_test(a):
cum_diff = d $ d
$ d $ cum cum c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c $ c>

谢谢

解决方案

忘了你的字符串的''

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

在[44]中:df
出[44]:
abc价值
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

BTW,在我看来,以下是m矿石优雅:

 在[53]:def my_test2(row):
....:return row [ 'a']%row ['c']
....:

在[54]中:df ['Value'] = df.apply(my_test2,axis = 1)


I have some problems with the Pandas apply function, when using multiple columns with the following dataframe

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

and the following function

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

When I try to apply this function with :

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

I get the error message:

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

I do not understand this message, I defined the name properly.

I would highly appreciate any help on this issue

Update

Thanks for your help. I made indeed some syntax mistakes with the code, the index should be put ''. However I have still the same issue using a more complex function such as:

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

Thank you

解决方案

Seems you forgot the '' of your string.

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

BTW, in my opinion, following way is more elegant:

In [53]: def my_test2(row):
....:     return row['a'] % row['c']
....:     

In [54]: df['Value'] = df.apply(my_test2, axis=1)

这篇关于 pandas :如何使用应用功能到多个列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆