首页 > 解决方案 > 如何将多索引转换为热图

问题描述

Pandas/Python 的新手,我设法制作了一个如下所示的索引;

MultiIndex([( 1,  1,  4324),
            ( 1,  2,  8000),
            ( 1,  3,  8545),
            ( 1,  4, 8544),
            ( 1,  5, 7542),
            (12, 30, 7854),
            (12, 31, 7511)],
            names=['month', 'day', 'count'], length=366)

我正在努力找出如何将第一个数字存储到一个列表中(1-12 个),将第二个数字存储到另一个列表中(1-31 值),将第三个数字存储到另一个单独的列表中(分数 0-9000)

我正在尝试构建一个轴上的 Month x Day 的热图,并使用 count 作为值并且失败了!我假设我必须将月、日和计数分开到单独的列表中才能制作热图?

data1 = pd.read_csv("a2data/Data1.csv")
data2 = pd.read_csv("a2data/Data2.csv")
merged_df = pd.concat([data1, data2])
merged_df.set_index(['month', 'day'], inplace=True)
merged_df.sort_index(inplace=True)
merged_df2=merged_df.groupby(['month', 'day']).count.mean().reset_index()
merged_df2.set_index(['month', 'day', 'count'], inplace=True)

#struggling在这里分离月,日和计数以制作热图

标签: pandasindexingheatmap

解决方案


您是否在寻找:

# let start here
merged_df2=merged_df.groupby(['month', 'day']).count.mean()

# use sns
import seaborn as sns
sns.heatmap(merged_df2.unstack('day'))

输出:

在此处输入图像描述

或者您可以使用plt

merged_df2=merged_df.groupby(['month', 'day']).count.mean().unstack('day')

plt.imshow(merged_df2)
plt.xticks(np.arange(merged_df2.shape[1]), merged_df2.columns)
plt.yticks(np.arange(merged_df2.shape[0]), merged_df2.index)
plt.show()

这使:

在此处输入图像描述


推荐阅读