2017-04-13 245 views
4

我试图使用熊猫DataFrame绘制seaborn热图。 我的数据格式如下熊猫DataFrame Seaborn

visit_table 

    yyyymm visit_cnt 
0 201101  91252 
1 201102  140571 
2 201103  141457 
3 201104  147680 
4 201105  154066 
... 

68 201609  591242 
69 201610  650174 
70 201611  507579 
71 201612  465218 

我怎样才能改变数据帧到seaborn数据格式如下

2011  2012  2013 2015 

1  91252 
2  14057 
3  147680 
4  154066 
... 
11 123455 
12 1234456 

回答

2

可以使用to_datetime转换列yyyymm,然后创建新Series(列)与dt.monthdt.year。如有必要,最后重塑pivot并用fillna替换NaN0

df['yyyymm'] = pd.to_datetime(df['yyyymm'], format='%Y%m') 
df1 = pd.pivot(index=df['yyyymm'].dt.month, columns=df['yyyymm'].dt.year, values=df.visit_cnt) 
     .fillna(0) 
print (df1) 
yyyymm  2011  2016 
yyyymm      
1  91252.0  0.0 
2  140571.0  0.0 
3  141457.0  0.0 
4  147680.0  0.0 
5  154066.0  0.0 
9   0.0 591242.0 
10   0.0 650174.0 
11   0.0 507579.0 
12   0.0 465218.0 

另一种解决方案是类似的,只有set_indexunstack重塑:

df['yyyymm'] = pd.to_datetime(df['yyyymm'], format='%Y%m') 
df['year'] = df['yyyymm'].dt.year 
df['month'] = df['yyyymm'].dt.month 
df1 = df.set_index(['month','year'])['visit_cnt'].unstack(fill_value=0) 
print (df1) 
year  2011 2016 
month     
1  91252  0 
2  140571  0 
3  141457  0 
4  147680  0 
5  154066  0 
9   0 591242 
10   0 650174 
11   0 507579 
12   0 465218 

最后,使用seaborn.heatmap

import seaborn as sns 
ax = sns.heatmap(df1) 

graph

+0

jezrael - 非常感谢你 – user3571501

+0

高兴可以帮助你 - 小副词冰对未来 - 请添加一些代码,你尝试质疑,然后得到没有downvotes。美好的一天。 – jezrael