【问题标题】:How to resample pandas dataframe to model an average week?如何重新采样熊猫数据框以模拟平均一周?
【发布时间】:2019-05-29 15:27:15
【问题描述】:

我有一个包含消息数量和发送时间段的数据框(以 10 分钟为增量)。这是一个sn-p:

+---------------------+--------------+
|      UnixTime       | Num messages |
+---------------------+--------------+
| 2019-02-01 00:00:00 |           54 |
| 2019-02-01 00:10:00 |           23 |
| 2019-02-01 00:20:00 |           36 |
+---------------------+--------------+

此数据帧具有一年的增量时间戳和该期间的消息数。如何使用整个数据框和星期几作为参考来模拟平均/中位数周。

+-----------------+-------------------------+
| UnixTime (Mean) | Mean number of messages |
+-----------------+-------------------------+
| Friday 00:00:00 | 56.3                    |
| Friday 00:10:00 | 25.5                    |
| Friday 00:20:00 | 30.4                    |
+-----------------+-------------------------+

因此,输出数据框应该模拟一年中从周一到周日的平均一周,以及该时间段和日期在一年中的平均消息数。

我知道我可以通过df["Day Of Week"] = df['UnixTime'].dt.day_name() 获得星期几,但我如何才能模拟平均值,以便将09:00 - 09:10 之间的一年中的每个星期一视为同一组。

【问题讨论】:

  • 看看grouby。您应该能够执行以下操作:df.groupby('Day Of Week').mean().
  • 不确定我是否理解正确,但如果您想获得一周中每一天的平均值。数据框中的Mean number of messages 列不应该都具有相同的值吗?
  • @Erfan 所以这将是周五 00:00 到 00:10 之间发送的平均消息数,依此类推
  • 所以00:00 - 00:10 之间的每个星期五都被视为同一组?
  • @Erfan 就是这样,是的

标签: python pandas dataframe resampling


【解决方案1】:

我们可以有一个新列“weekNum”来将每一行标记为一年中第 N 周的一部分。我们可以对天的数值进行地板除法。

df["weekNum"] = int(df["UnixTime"].dt.day//7)

然后我们可以分组:

df.groupby("weekNum").mean()
df.groupby("Day of week").mean()

编辑:

既然我更好地理解了您的问题,要获得每 10 秒的间隔...我们可以使用 .strftime 并将我们的时间格式化为日期名称 %A 小时、分钟、秒 %H%M%S 并按此分组。

df["dayTime"] = df.UnixTime.dt.strftime("%A%H%M%S")
df.groupby("dayTime").mean()

【讨论】:

  • 您好,此方法将其分为 52 周,我将在一周之后代表全年的典型消息传递使用情况,其中包括时间段。这会给我一个星期一的平均消息数,我也想要星期一内每个时间段的平均消息数
  • 谢谢你,这很好。我曾想过将日期分成几个小时,但格式化日期是一个更干净的解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-05
  • 2016-08-06
  • 2022-01-18
  • 2020-01-10
  • 2021-12-23
  • 2020-05-14
相关资源
最近更新 更多