如何根据特定窗口的平均值(行数)创建新列?

问题描述 投票:0回答:1

我有一个像这样的数据框:

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 行(df[“A”])的平均值作为窗口。平均值应该在这 4 行中重复,但作为另一列。所以结果应该是这样的:

 df
Out[6]: 
    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

我尝试了这样的事情

df["B"] = df.rolling(window=4)['A'].mean()
,但它没有按预期工作。有人可以帮助我吗?

python pandas average scaling
1个回答
1
投票

这里不能使用

rolling
,因为窗口是滑动的,而不是固定的。

您需要使用范围的楼层划分作为

groupby.transform('mean')
的分组:

import numpy as np

df['B'] = df.groupby(np.arange(len(df))//4)['A'].transform('mean')

或者

df.index//4
如果您有范围索引。

输出:

    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
© www.soinside.com 2019 - 2024. All rights reserved.