想象一个这样的表:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type='text' id='firstNumber' placeholder='Enter a number'>
<input type='text' id='operation' placeholder='Enter an operation'>
<input type='text' id='secondNumer' placeholder='Enter another number'>
<br>
<button>Calculate</button>
<br>
<p>The result is <span id='result'></span></p>
对于每个名字,我想要一个累积平均值,如下所示:
name | value
-----|------
Jack | 0
Jack | 1
Jack | 0.5
Jack | 1
Jill | 0
Jill | 2
因此,每当出现新名称时,累积平均值应“重新启动”。 名称列已排序,因此,每当出现新名称时,当前的累积平均值就会结束。
答案 0 :(得分:2)
您需要expanding().mean()
和groupby:
df.groupby('name')['value'].expanding().mean().reset_index(0)
对于未排序的df,以下方法将起作用:
df.groupby('name')['value'].expanding().mean().reset_index(0).sort_index()
name value
0 Jack 0.000
1 Jack 0.500
2 Jack 0.500
3 Jack 0.625
4 Jill 0.000
5 Jill 1.000
答案 1 :(得分:2)
即使名称未通过transforming expanding
函数进行排序,这也将起作用。
>>> df.assign(cumAverage=df.groupby('name', sort=False)['value'].transform(lambda x: x.expanding().mean()))
name value cumAverage
0 Jack 0.0 0.000
1 Jack 1.0 0.500
2 Jack 0.5 0.500
3 Jack 1.0 0.625
4 Jill 0.0 0.000
5 Jill 2.0 1.000
# Unsorted dataframe.
df = pd.DataFrame({"name": ['Jack'] * 3 + ['Jill'] * 2 + ['Jack'], "value": [0, 1, .5, 0, 2, 1]})
>>> df.assign(cumAverage=df.groupby('name', sort=False)['value'].transform(lambda x: x.expanding().mean()))
name value cumAverage
0 Jack 0.0 0.000
1 Jack 1.0 0.500
2 Jack 0.5 0.500
3 Jill 0.0 0.000
4 Jill 2.0 1.000
5 Jack 1.0 0.625