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

如何基于指定行数的窗口均值创建DataFrame新列?

Pandas按固定4行分组计算均值并填充对应行

首先是你的DataFrame定义:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({"ID":[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
                   "A":[30, 20, 10, 20, 60, 80, 90, 70, 120, 150, 120, 140]})

你需要创建新列B,将数据按每4行分为一个固定窗口,计算每组A列的均值后,把该均值填充到对应窗口的所有行中。

你之前尝试的df["B"] = df.rolling(window=4)['A'].mean()不符合预期,原因是rolling()是滑动窗口,它会依次计算每连续4行的均值(比如第4行是1-4行的均值,第5行是2-5行的均值),而不是把数据分割成独立的4行块。

正确解法

使用groupby结合索引分块,再通过transform将组内均值广播到每一行:

# 按每4行分组,计算每组A的均值并填充到对应行
df["B"] = df.groupby(df.index // 4)["A"].transform("mean")

运行后得到的结果和你的预期完全一致:

ID    A      B
0    1   30   20.0
1    2   20   20.0
2    3   10   20.0
3    4   20   20.0
4    5   60   75.0
5    6   80   75.0
6    7   90   75.0
7    8   70   75.0
8    9  120  132.5
9   10  150  132.5
10  11  120  132.5
11  12  140  132.5

补充说明

如果你的DataFrame索引不是连续整数,可以用pd.cut生成分组标签:

# 生成分组标签,每4行一组
groups = pd.cut(df.index, bins=len(df)//4, labels=False)
df["B"] = df.groupby(groups)["A"].transform("mean")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 09:32:42