如何删除列的值在集合中的DataFrame行?

And*_*rew 4 python set dataframe pandas

我有一套

remove_set
Run Code Online (Sandbox Code Playgroud)

我想删除数据框中列值在该集合中的所有行.

df = df[df.column_in_set not in remove_set]
Run Code Online (Sandbox Code Playgroud)

这给了我错误:

'Series' objects are mutable, thus they cannot be hashed. 
Run Code Online (Sandbox Code Playgroud)

什么是解决这个问题的最大熊猫/ pythonic方法?我可以遍历行并找出要排除的ilocs,但这看起来有点不雅.

一些样本输入和预期输出.

输入:

 column_in_set value_2 value_3
 1             'a'      3
 2             'b'      4
 3             'c'      5
 4             'd'      6

remove = set([2,4])
Run Code Online (Sandbox Code Playgroud)

输出:

column_in_set value_2 value_3
1             'a'      3
3             'c'      5
Run Code Online (Sandbox Code Playgroud)

Ale*_*ley 8

要进行选择,您可以写:

df[~df['column_in_set'].isin(remove)]
Run Code Online (Sandbox Code Playgroud)

isin() 只需检查列/ Series的每个值是否在一个集合(或列表或其他可迭代)中,返回一个布尔系列.

在这种情况下,我们希望只包含DataFrame中存在的行,remove因此我们将布尔值反转,~然后使用它来索引DataFrame.