首页 > 解决方案 > 来自 Pandas Dataframe 的多个 Seaborn 热图

问题描述

我有一个看起来像这样的 Pandas 数据框:

store_id    days       times                     rating
    100     monday     '1:00pm - 3:00pm'         0
    100     monday     '3:00pm - 6:00pm'         1
    100     monday     '6:00pm - 9:00pm'         2
    ...
    store n      

那里有大约 60 家商店,评分范围从 0 到 2。我想创建一个 6x5 网格 Seaborn 的热图,每个商店有一个热图。我希望 x 轴days为 y 轴为times.

我试过这个:

f, axes = plt.subplots(5,6)
i=0
for store in df['store_id']:
    sns.heatmap(data=df[df['store_id']==store]['rating'], ax=axes[i])
    i+=1

这会创建 5x6 网格,但会产生错误(“条件与输入之间的形状不一致...”)。最好的方法是什么?

标签: pythonpandasseaborn

解决方案


对于热图,您需要转置/旋转您的数据,以便days成为列(x 轴)并times成为索引:

f, axes = plt.subplots(5,6)

# flatten axes for looping
axes = axes.ravel()

# use groupby to extract data faster
for ax, (store, data) in zip(axes, df.groupby('store_id')):
    pivot = data.pivot_table(index='times', columns='days', values='rating')
    sns.heatmap(data=pivot, ax=ax)

推荐阅读