2017-08-01 39 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 
相关问题