如何对大熊猫数据框重新采样以模拟平均一周?

时间:2019-05-29 15:27:16

标签: python pandas dataframe resampling

我有一个数据框,其中包含消息数及其发送的时间段(以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之间的一年中的每个星期一都视为同一组。

1 个答案:

答案 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()