计算新记录后的平均值
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
我正在阅读一些 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