Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 每列中每个值的计数热图_Python_Pandas_Dataframe_Pivot Table - Fatal编程技术网

Python 每列中每个值的计数热图

Python 每列中每个值的计数热图,python,pandas,dataframe,pivot-table,Python,Pandas,Dataframe,Pivot Table,我有这样一个数据帧: | A | B | C | D | |---|---|----|---| | 1 | 3 | 10 | 4 | | 2 | 3 | 1 | 5 | | 1 | 7 | 9 | 3 | | | A | B | C | D | |----|---|----|---|---| | 1 | 2 | 0 | 1 | 0 | | 2 | 1 | 0 | 0 | 0 | | 3 | 0 | 2 | 0 | 1 | | 4 | 0 |

我有这样一个数据帧:

| A | B | C  | D |  
|---|---|----|---|  
| 1 | 3 | 10 | 4 |  
| 2 | 3 | 1  | 5 |  
| 1 | 7 | 9  | 3 |  
|    | 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 | 
其中,B C D为类别,且值在[1,10]范围内(某些值可能不会出现在单个列中)

我希望有一个数据框,每个类别显示这些值的计数。大概是这样的:

| A | B | C  | D |  
|---|---|----|---|  
| 1 | 3 | 10 | 4 |  
| 2 | 3 | 1  | 5 |  
| 1 | 7 | 9  | 3 |  
|    | 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\u表
,但我似乎不明白应该给出什么参数。

  • 使用适用于每列
  • 将绘制一个
    DataFrame
    • 如果提供了数据帧,索引/列信息将用于标记列和行
选择1
导入seaborn作为sns
作为pd进口熊猫
#数据帧设置
数据={'A':[1,2,1],'B':[3,3,7],'C':[10,1,9],'D':[4,5,3]}
df=pd.DataFrame(数据)
#为每列创建计数的数据帧
计数=df.apply(pd.value\U计数)
#显示(计数)
A、B、C、D
1 2.0 NaN 1.0 NaN
2 1.0楠楠
3 NaN 2.0 NaN 1.0
4南1.0
5南1.0
7楠1.0楠楠
9楠楠1.0楠楠
10纳南1.0纳南
#密谋
sns.热图(计数)

选择2
  • 热图有许多样式选项可用,使用
    cmap
    更改颜色可以提高可视化效果。
  • 我认为选项1没有
    。fillna(0)
    看起来不那么忙
#计数
计数=df.apply(pd.value\U计数)。fillna(0)
#密谋
sns.heatmap(计数,cmap=“GnBu”,annot=True)

默认颜色
sns.heatmap(计数,annot=True)


从数据帧开始:

df = pd.DataFrame({'A': [1, 2, 1],
                   'B': [3, 3, 7],
                   'C': [10,1, 9],
                   'D': [4, 5, 3]},
                   index=[0, 1, 2])
for col in df.columns:
    d[col]=df[col].value_counts()
然后你可以做:

d = pd.DataFrame(0, index=np.arange(10), columns=['A','B','C','D'])
或者,更一般地说:

d = pd.DataFrame(0, index=np.arange(10), columns=df.columns)
d
将具有所需的数据帧结构,但具有所有值
0

填充数据框:

df = pd.DataFrame({'A': [1, 2, 1],
                   'B': [3, 3, 7],
                   'C': [10,1, 9],
                   'D': [4, 5, 3]},
                   index=[0, 1, 2])
for col in df.columns:
    d[col]=df[col].value_counts()
0
s被
NaN
s替换。再次将其设置为
0

d.replace(np.nan, 0, inplace=True)
这将为您提供:

+----+-----+-----+-----+-----+
|    |   A |   B |   C |   D |
|----+-----+-----+-----+-----|
|  0 |   0 |   0 |   0 |   0 |
|  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 |
+----+-----+-----+-----+-----+

这是我第一次发布答案,希望是有希望的

import seaborn as sns
import pandas as pd
import numpy as np

data = {'A': [1, 2, 1], 'B': [3, 3, 7], 'C': [10, 1, 9], 'D': [4, 5, 3]}
df = pd.DataFrame(data)

df1 = pd.DataFrame(data = None , index = np.arange(11),columns = df.columns) 

for value in df.columns:
    df1[value]= df[value].value_counts()    
df1.fillna(0)

相关:很遗憾,我无法在stackoverflow中选择两个答案为“已接受”。我也喜欢你的答案,因为它更灵活。我认为他/她的回答更完整,所以我将其标记为接受。但是你的也很好!谢谢,不用担心。我同意您的选择,您标记为已接受的答案是应该标记为已接受的答案;)