首页 > 解决方案 > 将 A 列数据框 A 中的值匹配到数据框 B 中的 B 列,并使用 pandas 从数据框 A 创建无匹配项列表

问题描述

试图从数据框 A 中的列 A 中获取与数据框 B 中的列 B 中的值 [ID] 不匹配的值 [ID] 列表。数据框 A,列 A 将只有 1 个值的实例 - 其中数据框 B、B 列可以有多个值的实例。

我想得到一个数据框,其中包含数据框 A 中的所有行,其中值在数据框 B 中不匹配。

这就是我得到的——但它有很多匹配项。

def get_hours_id(labor_excel, people_excel):
    df = pd.read_excel(labor_excel)
    df1 = pd.read_excel(people_excel)
    internal_id_people_list = df1['ID']
    internal_id_list = df['ID']
    non_match_id = set(internal_id_people_list).difference(internal_id_list)
    for id in non_match_id:
        result = df1[df1['ID'] == id]
        print(result)

数据框 A

Column A      Column B     Column C 
int(123)      name(mike)   department A
int(234)      name(Joe)    department B
int(567)      name(Jane)   department A

数据框 B

Column A      Column B     Column C 
int(123)      name(mike)   department A
int(123)      name(Mike)   department A
int(567)      name(Jane)   department B
int(567)      name(Jane)   department B
int(567)      name(Jane)   department B

新数据框(结果)

Column A      Column B     Column C 
int(234)      name(Joe)    department B

标签: pythonpandasdataframe

解决方案


这取决于数据的大小,但如果数据框很大,最好的解决方案可能是进行简单的连接并删除匹配的内容

df_B['flag'] = 1
unmacthed = df_A.merge(df_B, how='left').query('flag != flag')
unmacthed = unmacthed.drop('flag',axis=1)

推荐阅读