如何基于字典合并两个Pandas DataFrame?
基于映射字典合并两个Pandas DataFrame的实现方法
实现步骤
要完成你需要的合并,核心思路是通过映射字典关联两个DataFrame的对应字段,结合预处理后的df2完成合并,具体操作如下:
预处理df2:去重保留唯一标识行
由于df2中存在重复的col01值(如name1出现两次),而你的预期结果只匹配每个col01对应的第一条记录,所以先对df2去重:import pandas as pd # 构造原始DataFrame df1 = pd.DataFrame({ 'col11': ['abc', 'bcd', 'cdf', 'abc'], 'col22': [25, 55, 15, 74], 'col33': [36, 96, 19, 26] }) df2 = pd.DataFrame({ 'col01': ['name1', 'name2', 'name3', 'name1'], 'col02': ['x', 'g', 't', 'k'], 'col03': [346, 926, 179, 286] }) mydict = {'abc': 'name1', 'bcd': 'name2', 'cdf': 'name3'} # 对df2去重,保留每个col01的第一条记录 df2_unique = df2.drop_duplicates(subset='col01', keep='first')映射字段并合并DataFrame
通过map方法将df1的col11转换为df2的col01对应值,再执行左连接合并:# 给df1添加映射后的col01列 df1['col01'] = df1['col11'].map(mydict) # 左连接合并,确保df1的所有行都被保留 merged_df = pd.merge(df1, df2_unique, on='col01', how='left')
最终结果
执行上述代码后,merged_df的输出与你预期的结果完全一致:
col11 col22 col33 col01 col02 col03 0 abc 25 36 name1 x 346 1 bcd 55 96 name2 g 926 2 cdf 15 19 name3 t 179 3 abc 74 26 name1 x 346
补充说明
- 如果需要匹配df2中
col01的所有重复记录,只需去掉df2.drop_duplicates这一步直接合并即可,但此时结果会出现多行匹配的情况。 - 使用
how='left'可以确保df1中的所有行都被保留,避免因映射不到而丢失数据。
内容的提问来源于stack exchange,提问作者HMadadi
相关产品推荐
相关产品推荐

