如果符合集合中的任何值,我想删除数据框中的行。我尝试了以下代码的许多不同迭代,但它们不起作用:
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)
答案 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