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

使用Pandas透视DataFrame实现行值转列的问题咨询

问题原因

你原有代码存在两个问题:

  • 多余的cumsum累加逻辑:你的需求仅为行转列透视,不需要按id分组累加数值,加了反而会改变原始值
  • 列名拼接顺序错误:原代码拼接后生成的是consumed_q122格式,你需要的是q122_consumed格式,需要交换拼接顺序

另外你期望输出中aa的q122_available值为笔误,原始数据对应值是272.8,不是272.2。

修复后代码

方案1:直接透视(最简洁,适配你的需求)

# 透视操作
out = df.pivot(index='id', columns='Date', values=['consumed', 'available'])
# 调整列名格式为 日期_字段名
out.columns = [f"{date}_{field}" for field, date in out.columns]
# 重置索引,把id从索引转为普通列
out = out.reset_index()

方案2:保留原有框架修改(如果你确实需要累加逻辑)

如果你的业务场景确实需要先按id分组累加consumed、available的值,只需要调整列名拼接顺序即可:

out = df[['id', 'Date']].join(
        df.groupby('id')[['consumed', 'available']].cumsum()
    ).pivot(index='id', columns='Date', values=['consumed', 'available'])

# 调整列名顺序
out.columns = [f"{date}_{field}" for field, date in out.columns]
out = out.reset_index()

输出验证

运行后得到的out结果如下,和你期望的格式一致:

id  q122_consumed  q122_available  q222_consumed  q222_available
0 aa          727.2           272.8          975.7            24.3
1 bb            0.0          1000.0          117.3           882.7

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:36:03