如何从时间戳创建每小时/天的seaborn热图,每小时有多个数据点

TBo*_*ton 5 python matplotlib seaborn

我有一个数据框,其中一date列是timestamp. 一天的每小时有多个数据点,例如2014-1-1 13:10, 2014-1-1 13:20等。我想将特定日期同一小时的数据点分组,然后使用 seaborn 创建热图并绘制不同的列。

我曾尝试使用,groupby但我不确定如何指定我想要的hourday

date             data
2014-1-1 13:10  50
2014-1-1 13:20  51
2014-1-1 13:30  51
2014-1-1 13:40  56
2014-1-1 13:50  67
2014-1-1 14:00  43
2014-1-1 14:10  78
2014-1-1 14:20  45
2014-1-1 14:30  58 
Run Code Online (Sandbox Code Playgroud)

我想按平均值组合数据

Qua*_*ang 5

您可以用来dt.strftime('%H')获取小时数和/dt.strftime('%Y-%m-%D')dt.normalize()天数

sns.heatmap(df.groupby([df.date.dt.normalize(), df.date.dt.strftime('%H:00')])
   ['data'].mean()
   .rename_axis(index=['day','hour'])
   .unstack(level=0)
)
Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述


更新:这几周,我们可以使用类似的方法

s = (df.groupby([df.date.dt.isocalendar().week,
                 df.date.dt.strftime('%Y-%m-%d'), 
                 df.date.dt.strftime('%H:00')])
       ['data'].mean()
       .rename_axis(index=['week','day','hour'])
    )

fig, axes = plt.subplots(2,2, figsize=(10,10))
for w, ax in zip(s.index.unique('week'), axes.ravel()):
    sns.heatmap(s.loc[w].unstack(level='day'), ax=ax)
    ax.set_title(f'Week {w}')
Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述