我有一个数据框,其中包含消息数及其发送的时间段(以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 |
+---------------------+--------------+
此数据框具有一年的递增时间戳记和该期间的消息数。如何使用整个数据框并以一周中的某天作为参考来建模平均/中位周。
+-----------------+-------------------------+
| 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
之间的一年中的每个星期一都视为同一组。>
答案 0 :(得分: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()