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

如何合并含重复值的DataFrame?其中一个DataFrame指定列值固定出现4次

解决重复值DataFrame的精准合并问题

嘿,这个场景我之前碰到过,核心思路是给每个重复的分组添加组内序号,让原本重复的A列值能和对应的行精准匹配,具体操作步骤如下:

步骤1:给两个DataFrame添加组内计数列

我们用groupby().cumcount()来生成每个A值在组内的出现序号(从0开始递增),这样每个(A, count)组合就能唯一标识一行:

# 给df添加组内计数
df['count'] = df.groupby('A').cumcount()

# 给df_key添加组内计数
df_key['count'] = df_key.groupby('A').cumcount()

cumcount()的作用是对每个分组内的行进行连续计数,比如foo在df里的4行,会被标记为0、1、2、3;df_key里的foo两行会被标记为0、1,刚好能对应上。

步骤2:基于A和count列执行合并

用pd.merge()同时以A和count作为连接键,选择how='left'来保留df里的所有行(即使df_key里没有对应序号的行,会自动填充NaN):

merged_df = pd.merge(df, df_key, on=['A', 'count'], how='left')

完整示例演示

我把你给出的示例数据完善后,跑一遍完整流程:

import pandas as pd

# 构造你的原始df
df = pd.DataFrame([['foo'], ['foo'], ['foo'], ['foo'], ['bar'], ['bar'], ['bar'], ['bar']], columns=['A'])

# 构造修正后的df_key(修正了原示例里的['...'],改成合理的行)
df_key = pd.DataFrame([['foo', 1, 2], ['foo', 3, 4], ['bar', 5, 9], ['bar', 2, 4], ['bar', 7, 8]], columns=['A', 'B', 'C'])

# 添加组内计数列
df['count'] = df.groupby('A').cumcount()
df_key['count'] = df_key.groupby('A').cumcount()

# 执行合并
merged_df = pd.merge(df, df_key, on=['A', 'count'], how='left')

print(merged_df)

输出结果:

A  count    B    C
0  foo      0  1.0  2.0
1  foo      1  3.0  4.0
2  foo      2  NaN  NaN
3  foo      3  NaN  NaN
4  bar      0  5.0  9.0
5  bar      1  2.0  4.0
6  bar      2  7.0  8.0
7  bar      3  NaN  NaN

结果说明

  • 对于foo:df里有4行,df_key里只有2行,所以后两行合并后填充NaN
  • 对于bar:df里有4行,df_key里有3行,最后一行填充NaN
  • 如果df_key里某个A值的出现次数超过4次,合并时只会匹配前4次(因为df里只有4行),不会额外增加行数

内容的提问来源于stack exchange,提问作者Michael Henry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:19:45