[英]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 系列x1
的FID
列中的值,这些值出现在x2
的FID
列中。
然后只需使用pd.DataFrame.loc
和运算符~
来反转 boolean 系列和x2
的x1
的行,其值在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'])
FID g1 g2 g3
0 0 19 20 13
2 2 15 20 11
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.