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

使用Python对数据集进行行转列透视并计算累计值的实现方法

实现方案

核心思路

  • 先按id分组,计算每期的power和count的净增量(当期新增减当期减少)
  • 对净增量做组内累计求和,再叠加该id的初始值(q122的cons_power/cons_count)得到每期的最终值
  • 最后用透视把行转成对应列名的宽表

完整代码

import pandas as pd

# 1. 提取每个id的初始值
init_val = df.groupby('id')[['cons_power', 'cons_count']].first().reset_index()

# 2. 计算每期净增量 + 组内累计
df['net_power'] = df['r_power'] - df['d_power']
df['net_count'] = df['r_count'] - df['d_count']
df['cum_power'] = df.groupby('id')['net_power'].cumsum()
df['cum_count'] = df.groupby('id')['net_count'].cumsum()

# 3. 关联初始值,计算每期最终值
df = df.merge(init_val, on='id', how='left')
df['final_power'] = df['cons_power'] + df['cum_power']
df['final_count'] = df['cons_count'] + df['cum_count']

# 4. 透视转宽表,得到期望输出
res = df.pivot(index='id', columns='date', values=['final_power', 'final_count'])
# 拼接列名,把date放前面符合输出要求
res.columns = [f'{col[1]}_{col[0].replace("final_", "")}' for col in res.columns]
res = res.reset_index()

结果验证

运行上述代码后得到的res就是你要求的输出格式:

idq122_powerq122_countq222_powerq222_count
aa5302155022
bb95077105082

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:15:00