簡體   English   中英

Pandas pivot 熱圖過濾最常見的值

[英]Pandas pivot heatmap filter most frequent values

基本上,我的最終結果應該是X個最常見的原產國的X個最喜歡的目的地的熱圖(例如 R 問題如何在這里僅為 50 個最高值創建熱圖)。 假設x=2與下面的小玩具 dataframe 對齊:

import pandas as pd

df = pd.DataFrame({'destination_1': ['Germany', 'France', 'UK', 'India', 'China'],
                   'destination_2': ['China', 'Vietnam', 'Namibia', 'India', 'UK'],
                   'destination_3' : ['France', 'Italy', 'Namibia', 'China', 'UK'],
                   'origin' : ['Germany', 'US', 'UK', 'China', 'UK']})

目的地計數應基於對所有三個目的地變量的提及。 為了解決這個問題,我融化了 pivot 數據。

 df1 = df.melt(id_vars= ['origin'],
    value_vars= ['destination_1', 'destination_2', 'destination_3'], var_name='columns')
df_heatmap = df1.pivot_table(index='origin',columns='value',aggfunc='count')

df_heatmap基本上已經是一個熱圖,可視化它沒有問題。 對我來說唯一的問題是我不知道在哪里/如何放置過濾器以僅保留x最常見的起點和目的地。

過濾 pivot 表以獲得真正的“總數”肯定會更好,但這是一種至少獲得x:x pivot 表維度的方法。 基本上,我在旋轉 dataframe 之前使用兩個維度中的最高值計數列表來過濾它。

df1 = df.melt(id_vars= ['origin'],
    value_vars= ['destination_1', 'destination_2', 'destination_3'],
    var_name='columns')

most = df1['origin'].value_counts()[:2].index.tolist()
most2 = df1['value'].value_counts()[:2].index.tolist()
filt = (df1['origin'].isin(most) & df1['value'].isin(most2))
df2 = df1[filt]

df_heatmap = df2.pivot_table(index='origin',columns='value',aggfunc='count', margins = True, margins_name='Total')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM