数据透视热图过滤器最常用值

2024-09-28 22:21:59 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上,我的最终结果应该是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最常见的源和目的地


Tags: 数据dfvalueorigindestinationpd热图目的地
1条回答
网友
1楼 · 发布于 2024-09-28 22:21:59

当然最好过滤透视表以获得真正的“总计”,但这里有一种方法至少可以获得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')

相关问题 更多 >