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)