Pandas DataFrame:将函数应用于所有列

roo*_*oot 28 python dataframe pandas

我可以.map(func)在df中的任何列上使用,例如:

df=DataFrame({'a':[1,2,3,4,5,6],'b':[2,3,4,5,6,7]})

df['a']=df['a'].map(lambda x: x > 1)
Run Code Online (Sandbox Code Playgroud)

我还可以:

df['a'],df['b']=df['a'].map(lambda x: x > 1),df['b'].map(lambda x: x > 1)
Run Code Online (Sandbox Code Playgroud)

是否有更多的pythonic方法将函数应用于所有列或整个帧(没有循环)?

Bre*_*arn 51

如果我理解你,你正在寻找applymap方法.

>>> print df
   A  B  C
0 -1  0  0
1 -4  3 -1
2 -1  0  2
3  0  3  2
4  1 -1  0
>>> print df.applymap(lambda x: x>1)
       A      B      C
0  False  False  False
1  False   True  False
2  False  False   True
3  False   True   True
4  False  False  False
Run Code Online (Sandbox Code Playgroud)


Zer*_*ero 5

从现在0.20.0开始,您可以使用transform

In [578]: df.transform(lambda x: x > 1)
Out[578]:
       A      B      C
0  False  False  False
1  False   True  False
2  False  False   True
3  False   True   True
4  False  False  False

In [579]: df
Out[579]:
   A  B  C
0 -1  0  0
1 -4  3 -1
2 -1  0  2
3  0  3  2
4  1 -1  0
Run Code Online (Sandbox Code Playgroud)

而且,对于这种简单的情况,为什么不仅仅使用df > 1

In [582]: df > 1
Out[582]:
       A      B      C
0  False  False  False
1  False   True  False
2  False  False   True
3  False   True   True
4  False  False  False
Run Code Online (Sandbox Code Playgroud)