[英]Average values in last n days pandas
在各種錦標賽中,我都有一個高爾夫球手及其高爾夫回合的數據框(請參閱下面發布的df head詞典)。 我需要一種快速的計算方式,對於玩家玩的每一輪,他在前n天的平均“筆畫收益”(SG),其中n是我確定的任何值。 我會知道如何通過將數據框轉換為列表列表並進行迭代來做到這一點,但這將非常緩慢。 理想情況下,我希望在Pandas df中增加一列標題為“最近100天玩家的平均SG”。
這是我們正在使用的(數據幀頭的字典):
{'Avg SG Player': {0: 0.4564491861877877,
1: -0.170952417298073,
2: 1.509033309098962,
3: -1.7298114700775877,
4: 1.7856746598995106},
'Avg Score': {0: 69.53846153846153,
1: 69.53846153846153,
2: 69.53846153846153,
3: 69.53846153846153,
4: 69.53846153846153},
'Date': {0: Timestamp('2003-01-23 00:00:00'),
1: Timestamp('2003-01-23 00:00:00'),
2: Timestamp('2003-01-23 00:00:00'),
3: Timestamp('2003-01-23 00:00:00'),
4: Timestamp('2003-01-23 00:00:00')},
'Field Strength': {0: 0.08871540761770776,
1: 0.08871540761770776,
2: 0.08871540761770776,
3: 0.08871540761770776,
4: 0.08871540761770776},
'Ind': {0: 0, 1: 1, 2: 2, 3: 3, 4: 4},
'Overall SG': {0: 7.627176946079241,
1: 5.627176946079241,
2: 5.627176946079241,
3: 4.627176946079241,
4: 4.627176946079241},
'Player': {0: 'Harrison Frazar',
1: 'John Huston',
2: 'David Toms',
3: 'James H. McLean',
4: 'Luke Donald'},
'Round': {0: 'R1', 1: 'R1', 2: 'R1', 3: 'R1', 4: 'R1'},
'Rounds Played': {0: 270, 1: 209, 2: 228, 3: 28, 4: 221},
'SG on Field': {0: 7.538461538461533,
1: 5.538461538461533,
2: 5.538461538461533,
3: 4.538461538461533,
4: 4.538461538461533},
'Score': {0: 62, 1: 64, 2: 64, 3: 65, 4: 65},
'Tourn-Round': {0: '2003 Phoenix OpenR1',
1: '2003 Phoenix OpenR1',
2: '2003 Phoenix OpenR1',
3: '2003 Phoenix OpenR1',
4: '2003 Phoenix OpenR1'},
'Tournament': {0: '2003 Phoenix Open',
1: '2003 Phoenix Open',
2: '2003 Phoenix Open',
3: '2003 Phoenix Open',
4: '2003 Phoenix Open'}}
EDITED
數據框本質上是這樣的:
當天的擊球選手日期
伍茲(T Woods)-2010年1月1日-5.4
R McIlroy-2010年1月1日-3.8
伍茲(T Woods)-2010年2月1日-0.4
等等
有350,000行。 我需要一個額外的列,提供有關玩家在當前回合日期之前的n(例如100)天內獲得的平均筆觸數。
因此,如果下一行是:
獲得的玩家日期筆畫(當天)
T伍茲-20-01-2018-3.2
我希望第四列(新列)稱為“ 100天平均”,為2.9((5.4 + 0.4)/ 2),因為這是Tiger在定義的時間范圍內的前兩輪的平均值。
謝謝,
湯姆
這應該工作:
n = 10000
start_date = pd.to_datetime('today') - pd.Timedelta(n, unit='D')
df[df['Date'] >= start_date].groupby('Player')['Avg SG Player'].mean()
如果要輸入開始日期和結束日期:
start_date = pd.to_datetime('2005-12-01')
end_date = pd.to_datetime('2015-12-01')
df[(df['Date'] >= start_date) & (df['Date'] <= end_date)].groupby('Player')['Avg SG Player'].mean()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.