python - 每列中每个值的计数热图
问题描述
我有一个这样的数据框:
| A | B | C | D |
|---|---|----|---|
| 1 | 3 | 10 | 4 |
| 2 | 3 | 1 | 5 |
| 1 | 7 | 9 | 3 |
其中 ABCD 是类别,值在 [1, 10] 范围内(某些值可能不会出现在单个列中)
我想要一个数据框,每个类别都显示这些值的计数。像这样的东西:
| | A | B | C | D |
|----|---|----|---|---|
| 1 | 2 | 0 | 1 | 0 |
| 2 | 1 | 0 | 0 | 0 |
| 3 | 0 | 2 | 0 | 1 |
| 4 | 0 | 0 | 0 | 1 |
| 5 | 0 | 0 | 0 | 1 |
| 6 | 0 | 0 | 0 | 0 |
| 7 | 0 | 1 | 0 | 0 |
| 8 | 0 | 0 | 0 | 0 |
| 9 | 0 | 0 | 1 | 0 |
| 10 | 0 | 0 | 1 | 0 |
我尝试使用groupby
,pivot_table
但我似乎无法理解要提供哪些参数。
解决方案
- 使用
pandas.Series.value_counts
适用于每一列 seaborn.heatmap
将绘制一个DataFrame
- 如果提供了 Pandas DataFrame,则索引/列信息将用于标记列和行。
选项1
import seaborn as sns
import pandas as pd
# dataframe setup
data = {'A': [1, 2, 1], 'B': [3, 3, 7], 'C': [10, 1, 9], 'D': [4, 5, 3]}
df = pd.DataFrame(data)
# create a dataframe of the counts for each column
counts = df.apply(pd.value_counts)
# display(count)
A B C D
1 2.0 NaN 1.0 NaN
2 1.0 NaN NaN NaN
3 NaN 2.0 NaN 1.0
4 NaN NaN NaN 1.0
5 NaN NaN NaN 1.0
7 NaN 1.0 NaN NaN
9 NaN NaN 1.0 NaN
10 NaN NaN 1.0 NaN
# plot
sns.heatmap(counts)
选项 2
- 热图有许多可用的样式选项,更改颜色
cmap
可以改善可视化效果。 - 我认为选项 1,没有
.fillna(0)
看起来不那么忙。
# counts
counts = df.apply(pd.value_counts).fillna(0)
# plot
sns.heatmap(counts, cmap="GnBu", annot=True)
默认颜色
sns.heatmap(counts, annot=True)
推荐阅读
- linux - 更新 CuDNN 次要版本时的静态库
- c# - 在 EF6 中使用 linq 进行查询是在数据库具有更新值时给出旧值
- java - Logging into Database with Log4j
- c# - 在作为 Windows 服务托管的 WCF 类库项目中使用 SqlDependency
- c# - Binding JSON values in my server side is getting failed
- python - heapq push TypeError: '<' not supported between instances
- github - 按主要语言过滤的存储库中的 GitHub 搜索代码
- javascript - javascript php AJAX refresh part of a DIV
- c# - How can I delete unavailable URL in browser history using C# .NET?
- python - Robot Framework - 访客界面 - 如何获取关键字的关键字子项?