使用 seaborn 热图

Using seaborn heatmap

我 运行 遇到一些在 seaborn 中使用热图的问题

代码:

df[['latitude', 'longitude', 'interest_level']]
a = df.pivot('latitude', 'longitude', 'interest_level')

错误:

ValueError: Index contains duplicate entries, cannot reshape

兴趣水平有多个重复值。我设想的是 lat/long 将形成一个二维图,兴趣级别是地图中的值。兴趣水平是绝对的,只有 3 个唯一值。

我是不是用错了 class 因为我正在学习 seaborn 热图教程 http://seaborn.pydata.org/generated/seaborn.heatmap.html

您需要 pivot_table 和一些聚合函数,例如 meansum、...:[=​​21=]

#subset for pivot_table or groupby solution is not necessary, you can omit it
#df = df[['latitude', 'longitude', 'interest_level']]
a = df.pivot_table(index='latitude', 
                   columns='longitude', 
                   values='interest_level', 
                   aggfunc='mean')

groupby,聚合函数和unstack

a = df.groupby(['latitude','longitude'])['interest_level'].mean().unstack()

样本:

df = pd.DataFrame({'latitude':[53,54,55,55],
                    'longitude':[10,11,12,12],
                    'interest_level':[1,5,2,6],
                    'another_col':[4,7,4,2]})
print (df)
   another_col  interest_level  latitude  longitude
0            4               1        53         10
1            7               5        54         11
2            4               2        55         12 <-duplicates for 55,12
3            2               6        55         12 <-duplicates for 55,12

a = df.pivot_table(index='latitude', 
                   columns='longitude', 
                   values='interest_level', 
                   aggfunc='mean')
print (a)
longitude   10   11   12
latitude                
53         1.0  NaN  NaN
54         NaN  5.0  NaN
55         NaN  NaN  4.0 <- (2+6)/2 = 4

最后一个:

ax = sns.heatmap(a)