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

R语言合并两个DataFrame并为重复值创建新列技术求助

解决DataFrame合并并展开重复值为新列的问题

没问题,我来帮你搞定这个需求!你想要把两个DataFrame合并,并且把同一col1+col2组合对应的多个col3值拆分成单独的新列(比如col3、col4、col5),下面是具体的实现步骤和代码示例:

步骤1:准备示例数据

首先我们先还原你给出的示例DataFrame:

import pandas as pd

# 创建你的df1
df1 = pd.DataFrame({
    'col1': ['A', 'C'],
    'col2': ['B', 'D']
})

# 创建你的df2
df2 = pd.DataFrame({
    'col1': ['A', 'A', 'C', 'C', 'C'],
    'col2': ['B', 'B', 'D', 'D', 'D'],
    'col3': ['E', 'F', 'G', 'H', 'I']
})

步骤2:给分组内的重复值添加序号

我们需要先给每个col1+col2分组里的col3值标记顺序,这样后续才能把它们转成不同的列:

# 按col1、col2分组,给每组内的行分配从1开始的序号
df2['group_index'] = df2.groupby(['col1', 'col2']).cumcount() + 1

步骤3:将重复值转成新列(Pivot操作)

用pivot把分组序号转成列,同时把col3的值填充到对应的位置:

# 执行pivot,把group_index作为列,col3作为值
pivoted_df = df2.pivot(
    index=['col1', 'col2'],  # 保持不变的主键列
    columns='group_index',   # 要转成列的分组序号
    values='col3'            # 要填充的值
)

# 重命名列,改成col3、col4、col5...的格式
pivoted_df.columns = [f'col{2 + idx}' for idx in pivoted_df.columns]

# 把索引列(col1、col2)变回普通列
result_df = pivoted_df.reset_index()

步骤4:和df1合并(可选)

如果你的df1包含df2里没有的col1+col2组合,需要用左连接来保留这些组合:

result_df = df1.merge(result_df, on=['col1', 'col2'], how='left')

最终结果

运行完上面的代码后,result_df就是你想要的目标DataFrame:

col1 col2 col3 col4  col5
0    A    B    E    F   NaN
1    C    D    G    H     I

注:A+B组合只有两个col3值,所以col5会显示NaN,如果需要可以用fillna('')把空值替换成空字符串。

内容的提问来源于stack exchange,提问作者Kevin Guo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:09:06