使用带有超过1 df列的.apply()

时间:2013-06-27 13:42:42

标签: python pandas

我在python / pandas中有一个带有几个列的df,并希望将df.apply(some_function)传递给'some_function'列。

这样做的最佳方式是什么?

提前致谢!

1 个答案:

答案 0 :(得分:6)

在您申请之前

子集

In [151]: df = DataFrame(randn(10,3),columns=list('ABC'))

In [152]: df
Out[152]: 
          A         B         C
0 -0.071947 -0.243518 -0.188782
1 -1.028449  0.525397  1.629097
2  0.302620 -0.530769 -2.039222
3  0.484875 -0.840589 -1.006550
4  0.915714  0.631991  0.044289
5 -1.444943 -0.603629  0.552810
6 -0.113523  0.242165  1.309373
7 -0.676176  2.827214  0.223679
8 -0.467043  0.324336 -0.704214
9  0.329897 -0.121696  1.810813

In [153]: df[['A','B']].apply(sum)
Out[153]: 
A   -1.768975
B    2.210902
dtype: float64

In [154]: df[['A','B']].apply(lambda x: x.sum())
Out[154]: 
A   -1.768975
B    2.210902
dtype: float64

第二部分,逐行应用,返回A和B列中元素的“和”。您可以 几乎是你想要的东西。

In [21]: df = DataFrame(dict(A = 'foo', B = 'bar', C = 'bah'),index=range(5))

In [22]: df.loc[[3,4],'C'] = 'bah2'

In [23]: df
Out[23]: 
     A    B     C
0  foo  bar   bah
1  foo  bar   bah
2  foo  bar   bah
3  foo  bar  bah2
4  foo  bar  bah2

In [24]: df.apply(lambda x: x['A'] + x['B'] if x['C'] == 'bah' else x['A'] + x['C'],axis=1)
Out[24]: 
0     foobar
1     foobar
2     foobar
3    foobah2
4    foobah2
dtype: object