首页 > 解决方案 > Pandas:如何匹配/过滤来自 2 个不同数据帧的相同键/ID 值(重复项)并替换值?

问题描述

我有 2 个不同大小的数据框。第一个 dataframe( df1) 有 4 列,但其中两列与第二个 dataframe() 中的列同名,第二个 dataframe( df2) 仅包含 2 个列。共同的列是['ID']['Department']

我想检查是否有任何ID来自。如果是这样,我想用价值替换价值。df2df1df1['Department']df2['Department']

例如,df1看起来像这样:

ID      Department     Yrs Experience      Education
1234    Science        1                   Bachelors
2356    Art            3                   Bachelors
2456    Math           2                   Masters
4657    Science        4                   Masters

df2看起来像这样:

ID      Department    
1098    P.E.
1234    Technology       
2356    History            
     

我想检查IDfromdf2是否在df1,如果是,请更新Department. 输出应如下所示:

ID      Department     Yrs Experience      Education
1234    **Technology** 1                   Bachelors
2356    **History**    3                   Bachelors
2456    Math           2                   Masters
4657    Science        4                   Masters

预期的更新以df1粗体显示

有没有一种有效的方法来做到这一点?

感谢您花时间阅读本文并提供帮助。

标签: pythonpandasdataframeduplicatesdataset

解决方案


您可以使用IDto与通过设置on作为索引并取from列(这充当映射表)df1形成的 Pandas 系列进行映射。IDdf2Departmentdf2

然后,如果IDfrom不匹配df2,我们填充 from 的原始值Departmentdf1以在不匹配的情况下保留原始值):

df1['Department'] = (df1['ID'].map(df2.set_index('ID')['Department'])
                              .fillna(df1['Department'])
                    )

结果:

print(df1)

     ID  Department  Yrs Experience  Education
0  1234  Technology               1  Bachelors
1  2356     History               3  Bachelors
2  2456        Math               2    Masters
3  4657     Science               4    Masters

推荐阅读