如何用Pandas合并两个DataFrame且无重复行?解决同ID重复问题
解决Pandas Merge后同ID行重复的问题
要实现你要的结果,核心是先把DF2中同一ID的多个Vote值转成多列,再和DF1合并,具体步骤如下:
步骤1:给DF2的同ID行添加分组序号
先对DF2按ID分组,给每个组内的行分配递增序号,用来区分同一ID下的不同Vote值:
import pandas as pd # 示例数据 df1 = pd.DataFrame({'ID': [1,2,3], 'Gender': ['Male', 'Female', 'Female']}) df2 = pd.DataFrame({'ID': [1,2,2], 'Vote': [30,27,22]}) # 添加组内序号(从1开始计数) df2['vote_num'] = df2.groupby('ID').cumcount() + 1
处理后的DF2:
ID Vote vote_num 0 1 30 1 1 2 27 1 2 2 22 2
步骤2:将DF2转成宽表格式
用pivot方法把长表转成宽表,把vote_num作为列名后缀,生成Vote 1、Vote 2这类列:
df2_wide = df2.pivot(index='ID', columns='vote_num', values='Vote').rename( columns=lambda x: f'Vote {x}' ).reset_index()
处理后的宽表DF2:
ID Vote 1 Vote 2 0 1 30.0 NaN 1 2 27.0 22.0
步骤3:和DF1做左连接
用merge方法把处理好的宽表DF2和DF1左连接,保留DF1的所有行:
result = df1.merge(df2_wide, on='ID', how='left')
最终结果:
ID Gender Vote 1 Vote 2 0 1 Male 30.0 NaN 1 2 Female 27.0 22.0 2 3 Female NaN NaN
如果需要把NaN显示为<NA>,可以补充一行:
result = result.fillna('<NA>')
内容的提问来源于stack exchange,提问作者Acco
相关产品推荐
相关产品推荐

