Pandas将一个数据框中的行与另一个数据框的列中的行共享一个公共值

问题描述 投票:4回答:2

我有一个名为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值的行吗?

python pandas dataframe difference
2个回答
2
投票

您可以使用pd.Series.isinFIDx1列中创建FIDx2列中的值的布尔系列。

然后简单地将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

0
投票
x1.drop(x2['FID'])

输出

    FID  g1  g2  g3
 0    0  19  20  13
 2    2  15  20  11
© www.soinside.com 2019 - 2024. All rights reserved.