4
我有一個DataFrame df
其中每個記錄代表一個足球比賽。小組將出現不止一次。我需要爲每個球隊得分計算某種滾動平均值(呃,不完全是這封信的滾動平均值)。將累積平均函數應用於分組對象
date home away score_h score_a
166 2013-09-01 Fulham Chelsea 0 0
167 2013-09-03 Arsenal Everton 0 2
164 2013-09-05 Arsenal Swansea 5 1
165 2013-09-06 Fulham Norwich 0 1
163 2013-09-18 Arsenal Swansea 0 0
我需要計算的是每個團隊(主客場)的平均分數。
爲了簡便起見,我們只是做家居柱:
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
這個小組做手工。在這個結尾,我們應該結束2列,讓我們打電話給他們: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
我要進行這些計算爲我的數據,你有什麼建議嗎?
如果你想要的結果,如你的問題,你需要設置'home'爲索引(GROUPBY不會那麼做爲你)。例如。類似'df = df.set_index('home',drop = False,append = True).reorder_levels([1,0])。sort_index()' – joris
不需要lambda;你可以直接'.apply(pd.expanding_mean)'。 – DSM
@DSM啊,的確如此。謝謝!我改編了我的答案。 – joris