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

Python Pandas如何将DataFrame转置为带指定列值后缀的宽表

Pandas 实现宽表转换方案

直接使用 Pandas 内置的pivot方法即可实现该需求,核心是将ID作为行索引,A列作为列后缀的来源,B和C作为值列,最后合并多层列名即可。

完整实现代码

import pandas as pd

# 构造测试DataFrame,和你给出的结构一致
df = pd.DataFrame({
    'ID': [1, 1],
    'A': [2001, 2002],
    'B': [10, 15],
    'C': [5, 6]
})

# 长表转宽表
df_pivot = df.pivot(index='ID', columns='A', values=['B', 'C'])

# 拼接多层列名,生成 B_2001、C_2001 格式的列名
df_pivot.columns = [f"{col[0]}_{col[1]}" for col in df_pivot.columns]

# 重置索引,把ID从索引变回普通列
df_pivot = df_pivot.reset_index()

# 可选:调整列顺序,让同一年份的B、C列相邻,匹配你给出的输出格式
df_pivot = df_pivot[['ID'] + sorted(df_pivot.columns.drop('ID'), key=lambda x: x.split('_')[1])]

# 打印结果
print(df_pivot)

注意事项

  • 如果数据中存在同一个ID+同一个A值对应多条记录的情况,可以把pivot替换为pivot_table,额外指定aggfunc参数处理重复值的聚合逻辑,示例:
    df_pivot = df.pivot_table(index='ID', columns='A', values=['B', 'C'], aggfunc='sum')
    
    常用的聚合规则可选sum求和、mean求平均、first取第一条值等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:39:00