You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 19:42:09