如何重新采样 pandas 数据框以模拟平均一周?
How to resample pandas dataframe to model an average week?
我有一个包含消息数量和发送时间段的数据框(以 10 分钟为增量)。这是一个片段:
+---------------------+--------------+
| UnixTime | Num messages |
+---------------------+--------------+
| 2019-02-01 00:00:00 | 54 |
| 2019-02-01 00:10:00 | 23 |
| 2019-02-01 00:20:00 | 36 |
+---------------------+--------------+
此数据框具有一年的增量时间戳和该期间的消息数。我如何使用整个数据框并作为星期几作为参考来建模 mean/median 周。
+-----------------+-------------------------+
| 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
之间的一年中的每个星期一都被视为同一组。
我们可以有一个新列 "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()
我有一个包含消息数量和发送时间段的数据框(以 10 分钟为增量)。这是一个片段:
+---------------------+--------------+
| UnixTime | Num messages |
+---------------------+--------------+
| 2019-02-01 00:00:00 | 54 |
| 2019-02-01 00:10:00 | 23 |
| 2019-02-01 00:20:00 | 36 |
+---------------------+--------------+
此数据框具有一年的增量时间戳和该期间的消息数。我如何使用整个数据框并作为星期几作为参考来建模 mean/median 周。
+-----------------+-------------------------+
| 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
之间的一年中的每个星期一都被视为同一组。
我们可以有一个新列 "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()