Python使用lambda将pd.DataFrame应用于嵌套循环是否可行?

Python使用lambda将pd.DataFrame应用于嵌套循环是否可行?,python,performance,nested,pandas,Python,Performance,Nested,Pandas,我试图通过使用lambda apply创建一个新列来避免python中的嵌套循环 使用以下参数: from pandas import * import pandas as pd df = pd.DataFrame((np.random.rand(100, 4)*100), columns=list('ABCD')) df['C'] = df.apply(lambda A,B: A+B) TypeError:(“()正好接受2个参数(给定1个)”,u'出现在索引A') 显然,这不起作用

我试图通过使用lambda apply创建一个新列来避免python中的嵌套循环 使用以下参数:

from pandas import *
import pandas as pd    
df = pd.DataFrame((np.random.rand(100, 4)*100), columns=list('ABCD'))
df['C'] = df.apply(lambda A,B: A+B)
TypeError:(“()正好接受2个参数(给定1个)”,u'出现在索引A')


显然,这不起作用,有什么建议吗

是否要添加列
A
和列
B
,并将结果存储在
C
中?然后你可以让它更简单:

df.C = df.A + df.B

正如@EdChum在注释中指出的那样,
apply
中函数的参数是一个系列,默认情况下位于轴
0
上,该轴是行(轴
1
表示列):

在这里,我们添加第一行和第二行:

>>> df.apply(lambda s: s[0] + s[1])
A    143.425475
B    125.411981
C    111.561680
D    120.786886
dtype: float64
要处理列,请使用
axis=1
关键字参数:

>>> df.apply(lambda s: s[0] + s[1], axis=1)
0     130.235156
1     138.602299
2      26.991364
3     143.229523
...
98    152.640811
99     90.266934
产生与按名称引用列相同的结果:

>>> (df.apply(lambda s: s[0] + s[1], axis=1) == 
     df.apply(lambda s: s['A'] + s['B'], axis=1))
0     True
1     True
2     True
3     True
...
98    True
99    True

默认情况下,应用程序无法按列运行,而且您误解了lambda参数实际表示的内容,因此lambda func无法按预期映射到列。如果你想让它按行运行,你需要像这样做
df['c']=df.apply(lambda row:row.A+row.B,axis=1)
但是@miku的答案会达到你想要的效果,并且是正确的simpler@EdChum,
df.apply(lambda s:s.A+s.C,axis=1)
生成一个
AttributeError:(“'Series'对象没有属性'A'”在0.12中,u'出现在指数0')
;但是,
df.apply(lambda s:s['A']+s['C'],axis=1)
起作用。@miku没有意识到这一点,看起来像是一个在0.12中修复的错误,我个人总是使用
[]
,因为它对我来说更容易理解。谢谢你指出这一点,你说对了。谢谢:)
>>> (df.apply(lambda s: s[0] + s[1], axis=1) == 
     df.apply(lambda s: s['A'] + s['B'], axis=1))
0     True
1     True
2     True
3     True
...
98    True
99    True