计算新记录后的平均值

Calculate mean after new recording

我正在阅读一些 excel 文件,我想在其中计算列 'Duration' 的平均值,但我想在记录 1、2、3 等之后查看平均值的变化.所以对于下面的 table 它将是:

Mean1 = (3+3+3/3)

Mean2 = (3+3+3+4+6/5)

Mean3 = (3+3+3+4+6+4+3+1+4/9)

每个文件可以有不同数量的录音(但总是从 1 开始)和每个录音的不同持续时间。

是否可以在 Python 中制作自动执行此操作的脚本?

Recording Duration
1 3
1 3
1 3
2 4
2 6
3 4
3 3
3 1
3 4

IIUC,你可以 groupby "Recording" and get the ratio of the cumulated sum and cumulated count (using cumsum):

g = df.groupby('Recording')['Duration']
s = g.sum().cumsum()/g.count().cumsum()

输出:

Recording
1    3.000000
2    3.800000
3    3.444444
Name: Duration, dtype: float64

中间体:

>>> g.sum().cumsum()
Recording
1     9
2    19
3    31
Name: Duration, dtype: int64

>>> g.count().cumsum()
Recording
1    3
2    5
3    9
Name: Duration, dtype: int64

您可以根据定义计算平均值 - 首先获取 sum 并按 Recording 计算,将累加和加上 DataFrame.cumsum,然后将 sum 除以 [=15] =] 列:

df = df.groupby('Recording')['Duration'].agg(['sum','size']).cumsum().reset_index()
df['avg'] = df.pop('sum').div(df.pop('size'))
print (df)
   Recording       avg
0          1  3.000000
1          2  3.800000
2          3  3.444444