在Pandas多级索引DataFrame中使用cumsum方法实现累计计算
实现多级索引DataFrame的分组累计求和
嘿,我完全get到你的需求了——就是要按Stock分组,对Stock_RES列做组内累计求和,得到你示例里WANTED列的效果对吧?用pandas的groupby+cumsum组合就能完美解决,步骤超简单:
核心代码
直接针对你的多级索引DataFrame执行以下代码即可:
# 按Stock(多级索引的第一级)分组,对Stock_RES列做组内累计求和 df['WANTED'] = df.groupby(level='Stock')['Stock_RES'].cumsum()
如果你习惯用索引位置来指定分组键(Stock是第0级索引),也可以这么写:
df['WANTED'] = df.groupby(level=0)['Stock_RES'].cumsum()
为什么这能生效?
groupby(level='Stock')会把DataFrame按每个Stock单独拆分成子组,比如ALKM、ANDI、APPZ各自成组;cumsum()会在每个子组内从第一条记录开始,逐步累加Stock_RES的值,正好和你给出的WANTED列结果完全匹配(微小的浮点差异是正常的精度问题)。
验证示例(拿ALKM组举例)
- 第一条记录:
-53.85→ 累计和就是-53.85 - 第二条记录:
-53.85 + 111.11 = 57.26 - 第三条记录:
57.26 + 233.33 = 290.59(和你的290.60是浮点精度导致的细微差别) - 后续记录的累加逻辑也完全一致,完美符合预期。
额外提示(如果还没设置多级索引)
如果你的原始数据还没把Stock和Date设为多级索引,先执行这一步:
df = df.set_index(['Stock', 'Date'])
内容的提问来源于stack exchange,提问作者J Westwood
相关产品推荐
相关产品推荐

