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

如何用Pandas计算固定窗口前10行均值并按指定索引提取结果

问题:按段计算前10个值的均值并保留指定索引行

我已经创建了示例DataFrame,需要计算每连续10个值的均值并将结果存入新列,其余行显示NaN。当前用以下代码得到了连续的滚动均值结果:

np.random.seed(42)
sp= sorted(np.random.randint(0,200,55))
odo = sorted(np.random.randint(0,40,55))
df1 = pd.DataFrame({'sp':sp,'odo':odo})

# 获取10个值的滚动均值
df2 =df1.rolling(10).agg('mean')

# 现在得到的是连续的滚动均值结果

# 我想要提取索引为9、19、29等位置的行,最终结果如下:
df3 = df2[9::10]

预期输出结果为:

sp   odo
9    17.7   2.9
19   56.2   8.2
29   89.1  15.4
39  120.7  23.4
49  167.9  30.7

解决方法

这里提供两种贴合需求的实现方式:

方法1:基于滚动均值筛选目标索引

你的现有代码已经能提取目标行,若要把结果合并回原DataFrame,让其余行显示NaN,只需用where方法过滤索引:

# 先计算10窗口的滚动均值
df_rolling = df1.rolling(10).mean()
# 仅保留索引为9、19、29...的行值,其余设为NaN
df1['sp_mean'] = df_rolling['sp'].where(df_rolling.index % 10 == 9)
df1['odo_mean'] = df_rolling['odo'].where(df_rolling.index % 10 == 9)

方法2:按10行分段计算均值

如果需求是严格每10行一组计算均值(而非滚动),可以用groupby分组后映射结果:

# 按索引整除10分组,计算每组均值
grouped_mean = df1.groupby(df1.index // 10).mean()
# 将均值赋值给每组最后一行(索引9、19...),其余行设为NaN
df1['sp_mean'] = grouped_mean['sp'].reindex(df1.index // 10).where(df1.index % 10 == 9)
df1['odo_mean'] = grouped_mean['odo'].reindex(df1.index // 10).where(df1.index % 10 == 9)

两种方法都能得到你想要的结果,按需选择即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:55:23