如何基于指定行数的窗口均值创建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
相关产品推荐
相关产品推荐

