我有一个名为x1的数据框:
FID g1 g2 g3
0 19 20 13
1 16 11 14
2 15 20 11
和一个称为x2的数据框:
FID g1
1 16
我想更改x1,使其不包括x2中的行:
FID g1 g2 g3
0 19 20 13
2 15 20 11
我尝试过:
x1 = pd.concat([x1,x2]).drop_duplicates(keep=False)
但是,仅当数据帧具有匹配的架构时,这才起作用。我可以只在x1中保留不共享x2中FID值的行吗?
您可以使用pd.Series.isin
在FID
的x1
列中创建FID
的x2
列中的值的布尔系列。
然后简单地将pd.DataFrame.loc
与运算符~
一起使用以反转布尔序列,并选择x1
的行,其FID
列中的值do n't出现在FID
列中x2
:
cond = x1.FID.isin(x2.FID)
x1.loc[~cond]
# output:
FID g1 g2 g3
0 0 19 20 13
2 2 15 20 11
x1.drop(x2['FID'])
FID g1 g2 g3
0 0 19 20 13
2 2 15 20 11