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

Pandas按索引分组计算扩展均值且保持行顺序的实现问题

Pandas按索引分组计算扩展均值且保持行顺序的实现问题

嗨,我来帮你搞定这个问题!你想要的是按索引(week)分组后,对每个组内的列计算扩展均值,同时严格保留原始数据的行顺序,对吧?你的尝试思路方向没错,但没加入分组逻辑,所以没法按索引区分计算,自然得不到想要的结果。

先帮你把原始数据的代码写出来,方便复现:

import pandas as pd

# 构建你提供的df1
data = {'a': [47, 36, 29, -68, -12, 67],
        'b': [19, 44, 46, -37, 90, 66]}
df1 = pd.DataFrame(data, index=[9,9,10,10,10,9])

正确实现方案

核心思路是先按索引分组,在每个组内计算扩展均值,最后还原原始行顺序,具体代码如下:

# 1. 按索引分组,计算每组内的扩展均值
expanding_group_means = df1.groupby(level=0).expanding().mean().droplevel(0)

# 2. 按照原df1的行顺序重新排列结果,保证顺序一致
final_result = expanding_group_means.loc[df1.index]

运行后输出的结果完全符合你的预期:

a     b
9    47.0  19.0
9    41.5  31.5
10   29.0  46.0
10  -19.5   4.5
10  -17.0  33.0
9    50.0  43.0

代码解释

  • groupby(level=0):因为你的索引是单级的week,用level=0可以直接按索引分组,也可以写成groupby(df1.index),效果一致。
  • expanding().mean():对每个分组内的数据逐行计算扩展均值——也就是每一行的值,是该组从第一行到当前行所有数据的平均值,比如最后一行索引9的b列,就是(19+44+66)/3=43。
  • droplevel(0):分组后的结果会生成多层索引(分组索引+原索引),这里去掉第一层分组索引,只保留原始的week索引。
  • loc[df1.index]:分组计算后的结果会默认按组排序(比如先所有索引9的行,再索引10的行),用原df1的索引顺序重新选取行,就能完美还原你原始数据的行顺序。

为什么你的尝试没生效

你写的df1[df1.index == df1.index].expanding().mean()其实等价于直接对整个df1计算全局扩展均值,没有按索引分组的逻辑,所以自然没法区分不同week的计算结果啦。

备注:内容来源于stack exchange,提问作者younggotti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 15:09:34