我正在看年度棒球统计数据,并想计算一个滚动平均数,回顾过去3年的表现,在命中率方面。然而,我想解释这样一个事实:虽然我的数据集可以追溯到3年多以前,但是一个球员可能只在联盟中呆了1-2年,没有3年的观察值,我可以根据这些数据计算滚动平均值。例如:
In[6]: df = pd.DataFrame({'PLAYER_ID': ['A', 'A', 'A', 'B', 'B'],
'HITS': [45, 55, 50, 20, 24]})
In[9]: df
Out[9]:
PLAYER_ID HITS
0 A 45
1 A 55
2 A 50
3 B 20
4 B 24
我如何使用groupby和聚合/转换(或其他一些过程)来计算每个玩家的滚动平均值(最多3年历史总计),然后只使用可用历史观测值的最大值(对于可用的历史性能数据少于3年的玩家)?在
很肯定我的答案在熊猫套餐里,但我对任何解决方案都很感兴趣。在
谢谢!在
pd.DataFrame.rolling
自动为您处理此问题。{cd2>将使用您的数据^给出示例:对于您的例子,我使用的窗口大小只有1,这意味着我们将每个单独的观察视为其自身的平均值。这不是特别有趣。对于更多的数据,您可以使用更大的窗口大小:例如,如果您的数据是每周的,}如果您的数据是每天的,依此类推)。在
rolling(5)
将为您提供大约每月的窗口大小(或者{使用此方法时需要注意两个问题:
NaN
值,则这些值将被传播:每个包含NaN
的窗口也将是NaN
。你必须以某种方式防止这种情况发生。在相关问题 更多 >
编程相关推荐