2014-10-05 75 views
3

我有一個正常的DF如何創建基於2+條件大熊貓迭代而不利用新df.column?

A = pd.DataFrame([[1, 5, 2], [2, 4, 4], [3, 3, 1], [4, 2, 2], [5, 1, 4]], 
        columns=['A', 'B', 'C'], index=[1, 2, 3, 4, 5]) 

如果我想創建一個基於另一個專欄中,我不喜歡這樣的條件一欄,並按照預期運行。

In [5]: A['D'] = A['C'] > 2 
In [6]: A 
Out[6]: 
    A B C  D 
1 1 5 2 False 
2 2 4 4 True 
3 3 3 1 False 
4 4 2 2 False 
5 5 1 4 True 

但是,如果我想用2個條件......喜歡做同樣的:

A['D'] = A['C'] > 2 and A['B'] > 2  or  A['D'] = A['C'] > 2 & A['B'] > 2 

我得到了臭名昭著的

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 

我怎樣才能解決不重複?基於兩個條件創造這個新列的目的是爲了能夠使用這種類型的GROUPBY功能:

A.groupby('D').apply(custom_fuction) 

所以,也許有使用GROUPBY做整個事情的方式,但我不」不知道該怎麼做。

感謝

回答

1

使用&,不and,執行的elementwise邏輯與操作:

In [40]: A['D'] = (A['C'] > 2) & (A['B'] > 2) 

In [41]: A 
Out[41]: 
    A B C  D 
1 1 5 2 False 
2 2 4 4 True 
3 3 3 1 False 
4 4 2 2 False 
5 5 1 4 False 

你也可以跳過定義D柱:

In [42]: A.groupby((A['C'] > 2) & (A['B'] > 2)) 
Out[42]: <pandas.core.groupby.DataFrameGroupBy object at 0xab5b6ac> 
+0

我感到羞愧。 – hernanavella 2014-10-05 14:57:01

+1

不,不要。我們都在這裏學習。 – unutbu 2014-10-05 14:57:30