繁体   English   中英

Pandas 在一个 dataframe 中删除与另一个 dataframe 的列中的行共享一个共同值的行

[英]Pandas drop rows in one dataframe that share a common value with a rows in a column of another dataframe

我有一个名为 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创建一个 boolean 系列x1FID列中的值,这些值出现在x2FID列中。

然后只需使用pd.DataFrame.loc和运算符~来反转 boolean 系列和x2x1的行,其值在FID列的FID中不会出现:

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'])

output

    FID  g1  g2  g3
 0    0  19  20  13
 2    2  15  20  11

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM