繁体   English   中英

如何基于具有不同行数的另一个 Dataframe 中的一个相似列删除一个 DataFrame 中的行

[英]How to drop rows in one DataFrame based on one similar column in another Dataframe that has a different number of rows

我有两个完全不同的 DataFrame,除了一个特定列中的某些值:

df
  First  Last   Email             Age
0 Adam   Smith  email1@email.com   30
1 John   Brown  email2@email.com  35
2 Joe    Max    email3@email.com  40
3 Will   Bill   email4@email.com  25
4 Johnny Jacks  email5@email.com  50
df2
  ID   Location  Contact
0 5435 Austin    email5@email.com
1 4234 Atlanta   email1@email.com
2 7896 Toronto   email3@email.com

我将如何 go 关于在 df 的 Email 列和 df2 的 Contact 列中找到匹配值,然后根据该匹配删除 df 中的整行?

Output 我正在寻找(索引编号无关紧要):

df1
  First  Last   Email             Age
1 John   Brown  email2@email.com  35
3 Will   Bill   email4@email.com  25

我已经能够使用几种不同的方法来识别匹配项,例如:

将列名更改为相同

common = df.merge(df2,on=['Email'])
df3 = df[(~df['Email'].isin(common['Email']))]

但是 df3 仍然显示来自 df 的所有行。

我也试过:

common = df['Email'].isin(df2['Contact'])
df.drop(df[common].index, inplace = True)

再次识别匹配项,但 df 仍包含所有原始行。

因此,我遇到的主要困难是使用删除的匹配项更新 df 或创建一个新的 DataFrame ,在比较 df 中的 Email 列和 df2 中的 Contact 列时,它只包含具有不同值的行。 感谢任何建议。

如评论(@Arkadiusz)中所述,使用以下内容过滤您的数据就足够了

df3 = df[(~df['Email'].isin(df2.Contact))].copy()
print(df3)

暂无
暂无

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

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