【问题标题】:Rolling average by date in pandas? [duplicate]熊猫按日期滚动平均值? [复制]
【发布时间】:2021-04-10 13:50:18
【问题描述】:

我在下面有一个示例 df:

| date       | group  | price |
|------------|--------|-------|
| 11/25/2020 | cars   | 3     |
| 11/25/2020 | trucks | 2     |
| 11/26/2020 | cars   | 5     |
| 11/26/2020 | trucks | 2     |
| 11/27/2020 | cars   | 3     |
| 11/27/2020 | trucks | 4     |

我的最终目标是按日期获得每个组的滚动累积价格平均值。我想要的输出如下:

| date       | group  | avg_price |
|------------|--------|-----------|
| 11/25/2020 | cars   | 3         |
| 11/26/2020 | cars   | 4         |
| 11/27/2020 | cars   | 3.67      |
| 11/25/2020 | trucks | 2         |
| 11/26/2020 | trucks | 2         |
| 11/27/2020 | trucks | 2.67      |

我最初的想法是使用df.itertuples() 循环遍历df,同时使用带有日期范围的while loop,但我无法完全弄清楚。如果有人对最快的方法有任何提示/建议,将不胜感激,谢谢!

【问题讨论】:

标签: python pandas


【解决方案1】:

您可以使用expanding().mean() 作为累积平均值:

df = df.set_index('date').groupby('group').expanding().mean()

# group  date           price
# cars   11/25/2020  3.000000
#        11/26/2020  4.000000
#        11/27/2020  3.666667
# trucks 11/25/2020  2.000000
#        11/26/2020  2.000000
#        11/27/2020  2.666667

要匹配您的确切输出,请重置索引并重命名price

df = df.reset_index().reset_index().rename(columns={'price': 'avg_price'}))

#     group        date  avg_price
# 0    cars  11/25/2020   3.000000
# 1    cars  11/26/2020   4.000000
# 2    cars  11/27/2020   3.666667
# 3  trucks  11/25/2020   2.000000
# 4  trucks  11/26/2020   2.000000
# 5  trucks  11/27/2020   2.666667

【讨论】:

  • 扩展有什么作用? @tdy
  • 哦!谢谢@Anurag。这就像在固定起始索引的情况下滚动。
  • @Vishnudev 是的,还有expanding(),窗口大小不是恒定的。它不会像rolling() 那样滑动固定窗口,而是逐步扩展窗口。
  • 其实我才意识到这就是你所说的“开始索引固定”的意思
猜你喜欢
  • 2018-08-29
  • 2013-03-24
  • 2019-07-27
  • 2023-01-31
  • 1970-01-01
  • 1970-01-01
  • 2017-01-28
相关资源
最近更新 更多