2017-04-13 287 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