我需要计算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

07-24 09:16