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
相关产品推荐
相关产品推荐

