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

如何对pandas DataFrame执行透视转置得到指定列顺序的结果表

pandas 按分组合并行实现宽表转换

原始数据构造

已有如下结构的DataFrame:

import pandas as pd
df = pd.DataFrame({'fk ID': [1,1,2,2], 
                   'value': [3,3,4,5],
                   'valID': [1,2,1,2]})

原始数据打印效果:

fk ID  value  valID
0      1      3      1
1      1      3      2
2      2      4      1
3      2      5      2

需求说明

需要将同fk ID下的两行数据合并为一行,最终得到每行包含同一个fk ID对应的valID=1和valID=2的全部字段,目标结构如下:

fk IDvaluevalIDfk IDvaluevalID
131132
241252

实现代码

固定每组2行场景的极简实现

# 拆分两组数据后按列拼接
df1 = df[df['valID'] == 1].reset_index(drop=True)
df2 = df[df['valID'] == 2].reset_index(drop=True)
res = pd.concat([df1, df2], axis=1)

通用实现(支持每组超过2行的场景)

# 给同fk ID下的行生成组内序号
df['group_seq'] = df.groupby('fk ID').cumcount()
# 透视转换为宽表
res = df.set_index(['fk ID', 'group_seq']).unstack().sort_index(axis=1, level=1)
# 展平多层列名,若不需要区分后缀可直接设置为重复列名
res.columns = [col[0] for col in res.columns]
# 重置索引得到最终结果
res = res.reset_index()

注意事项

pandas默认不推荐使用重复列名,后续如果要按列名操作数据可能会出现异常,若仅用于展示可保留重复列名,建议给第二组列加后缀区分:

# 带后缀的列名设置示例
res.columns = [f"{col[0]}_{col[1]+1}" for col in res.columns]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:57:03