【问题标题】:Pandas pivot heatmap filter most frequent valuesPandas 枢轴热图过滤最常见的值
【发布时间】:2020-12-09 14:58:45
【问题描述】:

基本上,我的最终结果应该是X 最常见的原产国X 最喜欢的目的地的热图(如 R 问题How to create heatmap only for 50 highest value 此处)。假设x=2 与下面的小玩具数据框对齐:

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']})

目的地计数应基于所有三个目的地变量的提及。为了解决这个问题,我将数据融合并旋转。

 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 最常见的来源和目的地。

【问题讨论】:

    标签: python pandas pivot heatmap melt


    【解决方案1】:

    过滤数据透视表以获得真正的“总数”肯定会更好,但这是一种至少可以获取x:x 数据透视表维度的方法。基本上,我使用两个维度中的最高值计数列表来过滤数据框,然后再对其进行旋转。

    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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-23
      • 1970-01-01
      • 2017-08-13
      • 1970-01-01
      • 2021-10-13
      • 1970-01-01
      • 2016-09-06
      • 1970-01-01
      相关资源
      最近更新 更多