如何在没有保证观测次数的情况下使用Pandas滚动平均法

2024-04-25 06:20:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在看年度棒球统计数据,并想计算一个滚动平均数,回顾过去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年的玩家)?在

很肯定我的答案在熊猫套餐里,但我对任何解决方案都很感兴趣。在

谢谢!在


Tags: 数据iniddf玩家历史事实统计数据
1条回答
网友
1楼 · 发布于 2024-04-25 06:20:12

pd.DataFrame.rolling自动为您处理此问题。{cd2>将使用您的数据^给出示例:

             HITS PLAYER_ID
PLAYER_ID
A         0  45.0         A
          1  55.0         A
          2  50.0         A
B         3  20.0         B
          4  24.0         B

对于您的例子,我使用的窗口大小只有1,这意味着我们将每个单独的观察视为其自身的平均值。这不是特别有趣。对于更多的数据,您可以使用更大的窗口大小:例如,如果您的数据是每周的,rolling(5)将为您提供大约每月的窗口大小(或者{}如果您的数据是每天的,依此类推)。在

使用此方法时需要注意两个问题:

  1. 如果你的数据没有在一个月内连续采样,那么它就不会在一个月内连续采样。由于这个原因,如果你的数据还没有被定期采样,你通常需要重新采样。在
  2. 如果数据包含NaN值,则这些值将被传播:每个包含NaN的窗口也将是NaN。你必须以某种方式防止这种情况发生。在

相关问题 更多 >