为了账号安全,请及时绑定邮箱和手机立即绑定

每列中每个值的计数热图

每列中每个值的计数热图

慕婉清6462132 2023-07-18 13:25:55
我有一个像这样的数据框:| 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 | 我尝试使用groupbyandpivot_table但我似乎无法理解要给出哪些参数。
查看完整描述

3 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

  • 用途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)

//img3.sycdn.imooc.com/64b622910001fac403500256.jpg

选项2

  • 热图有许多可用的样式选项,并且更改颜色cmap可以改善可视化效果。

    • Seaborn:调色板

# counts

counts = df.apply(pd.value_counts).fillna(0)


# plot

sns.heatmap(counts, cmap="GnBu", annot=True)

//img4.sycdn.imooc.com/64b622a20001296a03570249.jpg

默认颜色

sns.heatmap(counts, annot=True)

//img4.sycdn.imooc.com/64b622ad0001640d03660248.jpg

查看完整回答
反对 回复 2023-07-18
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

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


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)


查看完整回答
反对 回复 2023-07-18
?
慕容708150

TA贡献1831条经验 获得超4个赞

# necessary imports

import pandas as pd

import numpy as np

从数据框开始:


df = pd.DataFrame({'A': [1, 2, 1],

                   'B': [3, 3, 7],

                   'C': [10,1, 9],

                   'D': [4, 5, 3]},

                   index=[0, 1, 2])

然后你可以这样做:


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。


填写数据框:


for col in df.columns:

    d[col]=df[col].value_counts()

s0被NaNs 取代。再次制作它们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 |

+----+-----+-----+-----+-----+


查看完整回答
反对 回复 2023-07-18
  • 3 回答
  • 0 关注
  • 72 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信