TBo*_*ton 5 python matplotlib seaborn
我有一个数据框,其中一date
列是timestamp
. 一天的每小时有多个数据点,例如2014-1-1 13:10, 2014-1-1 13:20
等。我想将特定日期同一小时的数据点分组,然后使用 seaborn 创建热图并绘制不同的列。
我曾尝试使用,groupby
但我不确定如何指定我想要的hour
和day
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)
我想按平均值组合数据
您可以用来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)
输出: