如何根据set中的值删除数据框中的行?

时间:2015-04-13 19:27:35

标签: python pandas

如果符合集合中的任何值,我想删除数据框中的行。我尝试了以下代码的许多不同迭代,但它们不起作用:

if subid in intersection == df_1["SubId"][x]:
    for x in range(len(df_1)):
        del df_1.iloc[x]

我收到关键错误:0。任何想法??

提前致谢。

编辑:我已将交叉定义如下:

intersection = set(ABC).intersection(XYZ)

1 个答案:

答案 0 :(得分:2)

如果您只想删除它们,请使用isin

df_1[~df_1["SubId"].isin(intersection)]

这将生成行的布尔掩码,它们与intersection中的一个值匹配,我们使用~

反转掩码

你正在做的事情会很慢,如果继续删除行,你的索引可能不会在df的末尾运行吗?

示例:

In [2]:

df = pd.DataFrame({'a':[0,1,2,3,4], 'b':np.random.randn(5)})
df
Out[2]:
   a         b
0  0  0.987283
1  1  0.683479
2  2  1.640774
3  3  1.262665
4  4 -1.462040
In [3]:

df[~df.a.isin([0,3])]
Out[3]:
   a         b
1  1  0.683479
2  2  1.640774
4  4 -1.462040