Python Pandas:计算组内移动平均值

新手上路,请多包涵

我有一个包含 100 个对象的时间序列的数据框:

 object  period  value
1       1       24
1       2       67
...
1       1000    56
2       1       59
2       2       46
...
2       1000    64
3       1       54
...
100     1       451
100     2       153
...
100     1000    21

我想计算 value 列的窗口 10 的移动平均值。我想我必须做类似的事情

df.groupby('object').apply(lambda ~calculate MA~)

然后按对象将这个系列合并到原始数据框?无法弄清楚确切的命令

原文由 Alexandr Kapshuk 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 662
2 个回答

您可以使用 滚动 transform

 df['moving'] = df.groupby('object')['value'].transform(lambda x: x.rolling(10, 1).mean())

1 中的 rolling 是最小周期数。

原文由 zipa 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以在 groupby 对象上直接使用 rolling 对象:

 df['moving'] = df.groupby('object').rolling(10)['value'].mean()

新的 pandas 版本在使用直接分配给列时会抛出错误,因此请使用:

 df['moving'] = df.groupby('object').rolling(10)['value'].mean().reset_index(drop=True)

原文由 Space Impact 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题