2017-08-01 84 views
1

我有一個包含許多行的數據幀。我希望僅當列中的值在列表中指定時才保留行。保留列表中出現的數據幀中的行

df.head() 

'id' 'col1' 'col2' 'col3 
row1 A  NaN B 
row2 C  D  E 
row3 X  NaN NaN 

List_val = ['A','X'] 

所需的輸出是:

df_new = 
'id' 'col1' 'col2' 'col3 
row1 A  NaN B 
row3 X  NaN NaN 

我試過如下:

df1 = df[df.columns.isin(List_val)] 

它沒有工作。如何結合任何和isin在一個功能?

在此先感謝。

AP

回答

2

你需要DataFrame.isin和檢查至少一個True每行DataFrame.anyaxis=1

print (df.isin(List_val)) 
     id col1 col2 col3 
0 False True False False 
1 False False False False 
2 False True False False 

print (df.isin(List_val).any(axis=1)) 
0  True 
1 False 
2  True 
dtype: bool 

df = df[df.isin(List_val).any(axis=1)] 
print (df) 
    id col1 col2 col3 
0 row1 A NaN B 
2 row3 X NaN NaN 

如果不需要比較id列只是drop它:

df = df[df.drop('id', axis=1).isin(List_val).any(axis=1)] 
print (df) 
    id col1 col2 col3 
0 row1 A NaN B 
2 row3 X NaN NaN 
相關問題