2017-03-28 30 views
1

我有一些數據,看起來像這樣(簡體)在pandas.DataFrame工作:檢查的值是列在pandas.DataFrame列表

|-----------|-----------|-----------| 
| Feature 1 | Feature 2 | Feature 3 | 
|-----------|-----------|-----------| 
|  A  |  B  |  D  | 
|  A  |  A  |  B  | 
|  A  |  D  |  A  | 
|  A  |  B  |  A  | 
|  A  |  A  |  A  | 
|  A  |  A  |  D  | 
|-----------|-----------|-----------| 

我想創建一個新的專欄回答了問題「在任何欄目中是否存在'D'值?」

所以最終的數據會看起來像:

|-----------|-----------|-----------|-----------| 
| Feature 1 | Feature 2 | Feature 3 | Feature 4 | 
|-----------|-----------|-----------|-----------| 
|  A  |  B  |  D  | True | 
|  A  |  A  |  B  | False | 
|  A  |  D  |  A  | True | 
|  A  |  B  |  A  | False | 
|  A  |  A  |  A  | False | 
|  A  |  A  |  D  | True | 
|-----------|-----------|-----------|-----------| 

我使用df.isin()方法試過,但我仍然不能夠這樣。

你們知道怎麼做嗎?

回答

4

試試這個方法:

df[df=='D'].any(1) 
+0

我認爲布爾索引是沒有必要... – jezrael

+0

@jezrael,是的,'df.eq( 'd')。任何(1)'就足夠了,但它已經被你的答案..覆蓋。) – MaxU

2

你需要簡單地D比較df然後檢查至少一個True通過any

df['Feature 4'] = (df == 'D').any(axis=1) 
print (df) 
    Feature 1 Feature 2 Feature 3 Feature 4 
0   A   B   D  True 
1   A   A   B  False 
2   A   D   A  True 
3   A   B   A  False 
4   A   A   A  False 
5   A   A   D  True 

還是比較使用eq

df['Feature 4'] = df.eq('D').any(axis=1) 
print (df) 
    Feature 1 Feature 2 Feature 3 Feature 4 
0   A   B   D  True 
1   A   A   B  False 
2   A   D   A  True 
3   A   B   A  False 
4   A   A   A  False 
5   A   A   D  True 

print (df.eq('D')) 
    Feature 1 Feature 2 Feature 3 
0  False  False  True 
1  False  False  False 
2  False  True  False 
3  False  False  False 
4  False  False  False 
5  False  False  True