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

如何按指定列合并行数据并将结果存储到新增同名列中

实现按指定列分组后将多行数据横向展开到新同名列

你要的同id多行数据横向扩展到同名列的效果,不需要把值拼接进原有列,核心是先给分组内的行打序号,再通过透视把不同序号的行值摊到新列即可,具体实现步骤如下:

  • 首先导入pandas并构造原始测试数据
import pandas as pd

df = pd.DataFrame({
    'id': [1,1,2,3,3,3],
    'unit': ['m','kg','m','number','kg','m'],
    'amount': [10,3,4,5,7,6]
})
  • 给每个id分组内的行添加从0开始的顺序计数,用来标识当前行是该id下的第几条数据
    df['group_row_num'] = df.groupby('id').cumcount()
  • 做透视转换,调整列顺序保证unit和amount一一对应,最后重置索引得到结果
# 按id做行索引,分组内行号做列索引,提取unit和amount的值
result = df.pivot(index='id', columns='group_row_num', values=['unit', 'amount'])
# 交换列层级、排序,保证unit和amount按顺序交替对应
result = result.swaplevel(axis=1).sort_index(axis=1)
# 拍平列名,去掉序号层级,保留原列名得到重复同名列
result.columns = [col[1] for col in result.columns]
# 把id从索引变回普通列
result = result.reset_index(drop=False)

运行后得到的输出如下,空值位置可以用result = result.fillna('')替换成空白,和你给出的示例格式完全一致:

id    unit  amount unit  amount unit  amount
0   1       m    10.0   kg     3.0  NaN     NaN
1   2       m     4.0  NaN     NaN  NaN     NaN
2   3  number     5.0   kg     7.0    m     6.0

注意:pandas默认不支持完全重名的列做后续计算,如果转换后还需要做数据处理,建议给列名加后缀区分(比如unit_1、amount_1、unit_2、amount_2),仅做导出展示的话保留同名列没有问题。

内容的提问来源于stack exchange,提问作者Maul Seil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 22:33:24