亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

每列中每個值的計數熱圖

每列中每個值的計數熱圖

慕婉清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)

http://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)

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

默認顏色

sns.heatmap(counts,?annot=True)

http://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 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號