2012-10-05 91 views
23

我可以在DF任何列使用.map(func),如:熊貓數據框中:適用功能,所有列

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) 

我還可以:

df['a'],df['b']=df['a'].map(lambda x: x > 1),df['b'].map(lambda x: x > 1) 

是否有能夠施加更Python的方式一個函數到所有列或整個框架(沒有循環)?

+0

簡化你的'lambda'到'拉姆達X:X> 1' – Blender

+0

@攪拌機 - 感謝,編輯... – root

+0

就指出了這一點。你並不需要編輯原始問題。 – Blender

回答

35

如果我理解你是對的,你正在尋找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 
+0

@ BrenBarn - 是的,這正是我所期待的。沒有從文檔中注意到它。謝謝。 – root

1

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 

而且,對於這個簡單的情況下,爲什麼不使用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