Python 对分组对象应用累积平均函数

Python 对分组对象应用累积平均函数,python,group-by,pandas,Python,Group By,Pandas,我有一个数据帧df,其中每条记录代表一场足球比赛。团队将出现不止一次。我需要为每个团队的得分计算某种滚动平均值(好吧,不完全是滚动平均值) 我需要计算的是每支球队(主客场)的平均得分 为了简洁起见,让我们只做“主页”专栏: grouped = df.groupby('home') grouped = grouped.sort_index(by='date') # rows inside groups must be in asc order 这导致: date home a

我有一个数据帧
df
,其中每条记录代表一场足球比赛。团队将出现不止一次。我需要为每个团队的得分计算某种滚动平均值(好吧,不完全是滚动平均值)

我需要计算的是每支球队(主客场)的平均得分

为了简洁起见,让我们只做“主页”专栏:

grouped = df.groupby('home')
grouped = grouped.sort_index(by='date') # rows inside groups must be in asc order
这导致:

    date    home    away    score_h     score_a
home                        
Arsenal     167     2013-09-03  Arsenal     Everton     0   2
            164     2013-09-05  Arsenal     Swansea     5   1
            163     2013-09-18  Arsenal     Swansea     0   0
Fulham      166     2013-09-01  Fulham      Chelsea     0   0
            165     2013-09-06  Fulham      Norwich     0   1
问题从这里开始

现在,我需要计算团队的“滚动平均值”。让我们为名为
Arsenal
的小组手工操作。在这篇文章的结尾,我们应该有两个额外的专栏,我们称它们为:
rmean_h
rmean_a
。组中的第一个记录(
167
)得分为
0
2
。其中的
rmean
分别是
0
2
。对于组中的第二个记录(
164
),rmeans将是
(0+5)/2=2.5
(2+1)/2=1.5
,对于第三个记录,
(0+5+0)/3=1.66
(2+1+0)/3=1

我们的数据帧现在应该如下所示:

                    date       home         away    score_h score_a rmean_h rmean_a
home                        
Arsenal     167     2013-09-03  Arsenal     Everton     0  2    0       2
            164     2013-09-05  Arsenal     Swansea     5  1    2.5     1.5
            163     2013-09-18  Arsenal     Swansea     0  0    1.66    1
Fulham      166     2013-09-01  Fulham      Chelsea     0  0
            165     2013-09-06  Fulham      Norwich     0  1

我想对我的数据进行这些计算,您有什么建议吗?

您可以对每组应用
扩展的意思(请参见):

grouped = df.sort(columns='date').groupby('home')
grouped['score_h'].apply(pd.expanding_mean)

如果您希望得到问题中的结果,则需要将
home
设置为索引(groupby不会为您这样做)。例如,
df=df.set_index('home',drop=False,append=True)。重新排序_级别([1,0])。排序_index()
不需要lambda;你可以直接
.apply(pd.expansing\u mean)
。@DSM啊,是的。谢谢我修改了我的答案。
grouped = df.sort(columns='date').groupby('home')
grouped['score_h'].apply(pd.expanding_mean)