使用熊猫一次从不同的列中删除不同的元素

时间:2019-05-23 14:11:21

标签: python-3.x pandas numpy dataframe

我正在尝试从数据框的不同列中删除不同的元素。

这是我到目前为止尝试过的

xdf
Out[46]: 
   Name        Score1   Score2  Score3        Score4
0  Jack            10  Perfect      10       Perfect
1  Jill            10       10      10  Not Finished
2  Jane            20       10      10             5
3   Tom  Not Finished       15      10             5

drop_list = ["Perfect","Not Finished"]

xdf[~xdf["Score1"].isin(drop_list)]
Out[48]: 
   Name Score1   Score2  Score3        Score4
0  Jack     10  Perfect      10       Perfect
1  Jill     10       10      10  Not Finished
2  Jane     20       10      10             5

如果我只想从1列中删除,但我想在多列中删除(Score1,Score2,Score3,Score4),则上述方法效果很好

以下似乎也不起作用:

xdf[~xdf[["Score1","Score2","Score3","Score4"]].isin(drop_list)]
Out[49]: 
  Name Score1 Score2  Score3 Score4
0  NaN     10    NaN      10    NaN
1  NaN     10     10      10    NaN
2  NaN     20     10      10      5
3  NaN    NaN     15      10      5

有什么想法吗?谢谢

1 个答案:

答案 0 :(得分:1)

使用DataFrame.any进行测试,每行最多True

drop_list = ["Perfect","Not Finished"]
df = xdf[~xdf[["Score1","Score2","Score3","Score4"]].isin(drop_list).any(axis=1)]

print (df)
   Name Score1 Score2  Score3 Score4
2  Jane     20     10      10      5

print (xdf[["Score1","Score2","Score3","Score4"]].isin(drop_list))
   Score1  Score2  Score3  Score4
0   False    True   False    True
1   False   False   False    True
2   False   False   False   False
3    True   False   False   False

print (xdf[["Score1","Score2","Score3","Score4"]].isin(drop_list).any())
Score1     True
Score2     True
Score3    False
Score4     True
dtype: bool

print (~xdf[["Score1","Score2","Score3","Score4"]].isin(drop_list).any())

Score1    False
Score2    False
Score3     True
Score4    False
dtype: bool