繁体   English   中英

最近n天熊猫的平均值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM