pandas - Pandas:如何过滤数据框中不等于其他数据框中列组合的行?
问题描述
下面是两个数据框。我试图过滤 df_2 中不等于 df_count 行组合的行。我怎样才能实现这个目标?
import pandas as pd
df_1 = pd.DataFrame({'Name_1':['tom', 'jack', 'tom', 'jack', 'tom', 'nick', 'tom', 'jack', 'tom', 'jack'],
'Name_2':['sam', 'sam', 'ruby', 'sam','sam', 'jack', 'ruby', 'sam','ruby', 'sam']})
df_count = df_1.groupby(['Name_1','Name_2']).size().reset_index().rename(columns={0:'count'}).sort_values(['count'], ascending = False)
df_count = df_count.head(2)
df_count = df_count[['Name_1','Name_2']]
df_2 = pd.DataFrame({'Name_1':['tom', 'nick', 'tom', 'jack', 'tom', 'nick', 'tom', 'jack'],
'Name_2':['sam', 'mike', 'ruby', 'sam', 'sam', 'jack', 'ruby', 'sam'],
'Salary':[200, 500, 1000, 7000, 100, 300, 1200, 900],
'Currency':['AUD', 'CAD', 'JPY', 'USD', 'GBP', 'CAD', 'INR', 'USD']})
解决方案
pd.merge(df_2,df_count, indicator=True, how='outer').query('_merge=="left_only"').drop('_merge', axis=1)
输出:
Name_1 Name_2 Salary Currency
0 tom sam 200 AUD
1 tom sam 100 GBP
2 nick mike 500 CAD
7 nick jack 300 CAD
答案取自这里。
推荐阅读
- node.js - 我想运行终端命令 n nodejs 语言
- android - 扩展层内的 qrScanner,如何在 Flutter 中添加两个按钮
- c# - 初始化 git clone ASP.NET Core MVC 应用程序后标记为已卸载
- javascript - 组合相同代码部分的最佳方法
- mysql - 如何在mysql中解析ISO时间戳的时间?
- azure - 我在哪里可以查看 Azure DevOps 中剩余的虚拟用户分钟数 (VUM)?
- javascript - 如何在节点 js 中使用随机数、时间戳和密码创建摘要密码
- vue.js - 更改数据表标题中 Vuetify 复选框的颜色
- python - django所有字段都没有出现在管理表单中
- oracle - DBMS_LOCK 如何通过 NAME 找到 LOCKID