首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >来自两个分类变量列的Python热图

来自两个分类变量列的Python热图
EN

Stack Overflow用户
提问于 2020-08-05 11:18:17
回答 1查看 343关注 0票数 0

嗨,我需要从只有两列的数据框中绘制热图。这些列由大约300行组成。每一行都有一个用户分配的类别(A-E)和1-5之间的分数。

我想将每个类别的用户得分百分比显示为热图。

例如:

代码语言:javascript
运行
AI代码解释
复制
    1  2   3   4  5
A  70% 10% 10% 5% 5%
B  50% 20% 10% 8% 2%
C  30% 40% 10% 10% 10%
D  10% 30% 20% 30% 10%
E  20% 20% 40% 15% 5%

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2020-08-28 00:16:14

以下是我使用numpy、pandas和seaborn的解决方案:

代码语言:javascript
运行
AI代码解释
复制
import numpy as np
import pandas as pd
import seaborn
import matplotlib.pyplot as plt

# Create summaryTable
categories = np.array(['A','B','C','D','E'])
summaryTable = pd.DataFrame(index=categories, columns=np.arange(1,6))

for i in range(summaryTable.shape[0]):
    for j in range(summaryTable.shape[1]):
        df_ij = df.loc[df.Category == summaryTable.index[i]].loc[df.Score == summaryTable.columns[j]]
        numOccurances = df_ij.shape[0]
        numOccurancesCat = df.loc[df.Category == summaryTable.index[i]].shape[0]
        
        summaryTable.at[categories[i], j+1] = numOccurances / numOccurancesCat * 100
        
# Create heatmap 
summaryTable_np = summaryTable.to_numpy().astype(float)
xLabels = np.arange(1,6)
yLabels = categories
seaborn.heatmap(summaryTable_np, annot=True, linewidths=.5, square=True, 
                xticklabels=xLabels, yticklabels=yLabels,
                vmin=np.amin(summaryTable_np), vmax=np.amax(summaryTable_np), cmap='Reds')
plt.yticks(rotation=0) 

其中,df是具有大约300行和2列的数据框,summaryTable是用户得分百分表。

下面是一个热图示例:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63264054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档