Pandas 删除一个数据框中的行,这些行与另一个数据框的列中的行共享一个公共值

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


皈依舞
浏览 133回答 2
2回答

慕尼黑5688855

您可以使用在 的列中出现的列中pd.Series.isin的值创建布尔系列。FIDx1FIDx2然后只需使用pd.DataFrame.locwith 运算符~来反转布尔系列并选择其列中x1的值未出现在FID列中的行:FIDx2cond = x1.FID.isin(x2.FID)x1.loc[~cond] # output:   FID  g1  g2  g30    0  19  20  132    2  15  20  11

猛跑小猪

x1.drop(x2['FID'])输出    FID  g1  g2  g3 0    0  19  20  13 2    2  15  20  11
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python