首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在没有保证观测次数的情况下使用Pandas滚动平均值

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

Stack Overflow用户
提问于 2017-01-28 18:02:56
回答 1查看 917关注 0票数 2

我正在看年度棒球统计数字,并想要计算一个滚动的平均数,回顾过去3年的表现,在次数方面。然而,我想说明的事实是,虽然我的数据可以追溯到三年多以前,一名球员可能只在联赛中呆了1-2年,而且没有3年的观察值,我可以计算出滚动平均值。例如:

代码语言:javascript
复制
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

我如何使用组和聚合/转换(或其他一些进程)来计算每个球员的滚动平均值,其最大3年历史值为,然后仅对可用的历史数据不足3年的玩家使用可用的最大历史观测值?

很肯定,我的答案是在潘达斯的一揽子方案,但会感兴趣的任何解决方案。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-28 20:07:13

pd.DataFrame.rolling自动为您处理此问题。使用示例数据,df.groupby('PLAYER_ID').rolling(1).mean()将为您提供:

代码语言:javascript
复制
             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)将给您一个大约每月的窗口大小(如果您的数据是每日的,则是rolling(31) )。

在使用这一方法时应注意两个问题:

  1. 如果您的数据没有定期抽样(例如,如果数据一次跳过一周或一个月),则滚动平均值将无法及时对齐。由于这个原因,如果您的数据还没有定期抽样,您通常会想要对其进行重采样。
  2. 如果数据包含NaN值,这些值将被传播:包含该NaN的每个窗口也将是NaN。为了防止这种情况发生,你将不得不以某种方式算出那些值
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41913023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档