使用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就是你要求的输出格式:
| id | q122_power | q122_count | q222_power | q222_count |
|---|---|---|---|---|
| aa | 530 | 21 | 550 | 22 |
| bb | 950 | 77 | 1050 | 82 |
内容的提问来源于stack exchange,提问作者Lynn
相关产品推荐
相关产品推荐

