我有一个像这样的数据框:
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()
,但它没有按预期工作。有人可以帮助我吗?
这里不能使用
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