python - 如何根据具有不同行数的另一个 Dataframe 中的一个相似列删除一个 DataFrame 中的行
问题描述
除了一个特定列中的某些值外,我有两个完全不同的 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
我将如何在 df 的 Email 列和 df2 的 Contact 列中查找匹配值,然后根据该匹配删除 df 中的整行?
我正在寻找的输出(索引编号无关紧要):
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,或者在比较 df 中的 Email 列和 df2 中的 Contact 列时创建一个仅包含具有不同值的行的新 DataFrame。感谢任何建议。
解决方案
如评论(@Arkadiusz)中所述,使用以下内容过滤您的数据就足够了
df3 = df[(~df['Email'].isin(df2.Contact))].copy()
print(df3)
推荐阅读
- python - 从 Python 列表中生成约束组合对的最有效方法
- laravel - 直接在 Laravel 中运行 artisan 命令时创建日志文件
- python-3.x - Django 定义了一个模型,但模型的某些字段不起作用
- c# - await Task.Delay() 在使用 MVVMCross 的 Xamarin.iOS 上不起作用
- ios - 为什么在 ionic4 的 xcode 中会出现此错误
- android - 我正在尝试在 android 中使用毫秒发送通知?
- javascript - 将箭头功能更改为正常功能?
- django - 如何在 django 中进行模型级自定义字段验证?
- python - 对文件中的行使用正则表达式
- kotlin - Kotlin 多变量 Null 检查器方法实现