如何有效计算熊猫中所有后续行的均值?

时间:2019-10-23 00:04:52

标签: python pandas data-science

给出一个看起来像这样的数据框:

date,score
2019-10-01,5
2019-10-02,4
2019-10-03,3
2019-10-04,6

如何使用后续/后续行来计算score的平均值,以使其看起来/行为如下:

date,score
2019-10-01,5,(5+4+3+6)/4
2019-10-02,4,(4+3+6)/3
2019-10-03,3,(3+6)/2
2019-10-04,6,6

在SQL中,这是我尝试翻译的地方,在SQL中我可以编写:

select avg(score) over(order by date) ...

但是我很难在大熊猫中弄清楚这一点。

任何指导将不胜感激。

谢谢!

3 个答案:

答案 0 :(得分:1)

在相反的系列上尝试expanding

df['calc_mean'] = df.score[::-1].expanding(1).mean()

Out[228]:
         date  score  calc_mean
0  2019-10-01      5   4.500000
1  2019-10-02      4   4.333333
2  2019-10-03      3   4.500000
3  2019-10-04      6   6.000000

答案 1 :(得分:1)

自下而上使用cumsum除以arange

df['cummean'] = df.score[::-1].cumsum()[::-1] / np.arange(len(df), 0, -1)

         date  score   cummean
0  2019-10-01      5  4.500000
1  2019-10-02      4  4.333333
2  2019-10-03      3  4.500000
3  2019-10-04      6  6.000000

答案 2 :(得分:0)

cumsum(反向系列):

df['cum_mean'] = (df[::-1].assign(c=1)
                    .agg({'score':'cumsum', 'c':'cumsum'})
                    .assign(cum_mean = lambda x: x['score']/x['c'])
                    ['cum_mean']
                 )

输出:

         date  score  cum_mean
0  2019-10-01      5  4.500000
1  2019-10-02      4  4.333333
2  2019-10-03      3  4.500000
3  2019-10-04      6  6.000000