我需要计算DataFrame中某一列的平均值,以便计算出的每一行都排除了在特定组中为其计算的行的先前值。假设我们有这个数据框,这是预期的输出
有什么方法可以像按索引迭代每一行,在每次迭代中按索引添加前一行,然后计算均值。我想知道是否有更有效的方法
unit A Expected
T10 8 8
T10 7 7.5
T10 12 9
T11 10 10
T11 6 8
T12 17 17
T12 7 12
T12 3 9
最佳答案
将DataFrameGroupBy.cumsum
用计数器除以GroupBy.cumcount
:
g = df.groupby('unit')['A']
df['Expected'] = g.cumsum().div(g.cumcount() + 1)
print (df)
unit A Expected
0 T10 8 8.0
1 T10 7 7.5
2 T10 12 9.0
3 T11 10 10.0
4 T11 6 8.0
5 T12 17 17.0
6 T12 7 12.0
7 T12 3 9.0