首页 > 解决方案 > 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']})

标签: pandasdataframe

解决方案


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

答案取自这里


推荐阅读