2014-01-20 31 views
3

我在熊貓DF中有一些數據,並希望根據一些布爾條件來分離它的特定部分。下面兩行工作,我希望他們能夠:使用布爾語句來處理熊貓系列

df['test'] = df[df.N == 30].my_variable 
df['test2'] = df[df.Y >0.4].my_variable 

由於不是那個熟悉的大熊貓可是我再試着寫:

df['test'] = df[df.N == 30 & df.Y >0.4].my_variable 

但是,這將引發以下錯誤:

TypeError: ufunc 'bitwise_and' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

任何人都可以提出正確的(或更好的)方式來實現我想要做的事情嗎?

+0

不熟悉熊貓,但不應該使用'和'而不是'&'做一個邏輯「AND」? – senshin

+3

您是否曾嘗試在各個過濾器周圍放置括號?例如:'df [(df ['col1']> = 1)&(df ['col1'] <= 1)]' –

+0

哦,這也可能是一個運算符優先級問題,因爲'&比'=='和'>'做得更好,所以圍繞你的條件的括號也是一件好事。 – senshin

回答

2

如前所述,你可以用括號把這個包來強制正確的優先順序:

df[(df.N == 30) & (df.Y > 0.4)].my_variable 

值得一提的是,你可以使用loc(我認爲這是稍微乾淨):

df.loc[(df['N'] == 30) & (df['Y'] > 0.4), 'my_variable'] 
+0

另一種選擇是使用'DataFrame.query()':'df.query('N == 30和Y> 0.4')。my_variable' –

+0

剛看到@ TomAugspurger的評論:) –

+0

@PhillipCloud顯示新的查詢方法:D ....是否有一種狡猾的方式/語法來查詢它,以便它只提取一列?即在查詢中收集my_variable? –