pandas按分组计算列累计和且跳过每组前两行的实现方法
正确实现方案
你之前的代码逻辑是先对分组内所有值做累计和,再整体下移2位,累计结果会包含前两行的数值,不符合需求。
正确代码如下:
stack['chained_capacity'] = stack.groupby('Case', group_keys=False)['capacity_gw'].apply(lambda ser: ser.iloc[2:].cumsum())
逻辑说明
- 按
Case字段分组后,对每个分组的capacity_gw序列,仅取从第3行(索引从0开始计数,对应索引值为2)开始的部分计算累计和 - 分组内前两行的位置会自动填充为NaN,完全匹配你要的输出效果
- 加
group_keys=False是为了避免分组索引污染最终结果的原有多层索引结构
验证输出示例(CES - No Storage分组)
capacity_gw marginal_cost chained_capacity Case Category CES - No Storage Hydro 4.277016 0.000000 NaN Solar 9.774715 0.000000 NaN Wind 11.881870 0.000000 11.881870 Nuclear 5.242805 12.689066 17.124675 NGCC 2.101907 25.109150 19.226582 NGGT 4.638107 32.703513 23.864689 Overflow 35.000000 169.679554 58.864689
内容的提问来源于stack exchange,提问作者dylanjm
相关产品推荐
相关产品推荐

