删除包含数组内容的 pandas DataFrame 行

Delete pandas DataFrame rows with content from array

我有一个很大的 DataFrame(约 1 百万行),我需要根据唯一标识符 Trade_Id 删除一些行。我在另一个名为 tib 的 DataFrame 变量上有这些行的内容(在我的测试数据库中为 45000)。我的方法是这个

lentib=len(tib)
for i in range(0,lentib,1): # VERY SLOW
    dat=dat[dat.Trade_Id!=tib.Trade_Id[i]]

但问题是速度很慢,做dat[dat.Trade_Id!=tib.Trade_Id]也不行。

为了提高计算效率,有人有更好的主意吗?我还有其他像这样的数据库可以使用,我不想花两天时间来计算这个。

使用 isin 和否定运算符 ~:

过滤掉它们
dat=dat[~dat['Trade_Id']isin(tib)]

isin 将产生一个布尔掩码,您可以使用 ~ 反转它,这将删除包含 id 的行

示例:

In [127]:
df = pd.DataFrame({'col1':np.arange(10)})
df

Out[127]:
   col1
0     0
1     1
2     2
3     3
4     4
5     5
6     6
7     7
8     8
9     9

In [128]:    
df[~df['col1'].isin([2,5,8])]

Out[128]:
   col1
0     0
1     1
3     3
4     4
6     6
7     7
9     9

面具看起来像这样:

In [129]:
df['col1'].isin([2,5,8])

Out[129]:
0    False
1    False
2     True
3    False
4    False
5     True
6    False
7    False
8     True
9    False
Name: col1, dtype: bool