1. 程式人生 > >Pandas melt和pivot_table比excel透視表好用多了

Pandas melt和pivot_table比excel透視表好用多了

Melt英語就是熔化,Pivot是轉動的意思,原表格

  zt date 合計 企財險 家財險 車險 貨運險 工程險 責任險 短期意外險 短期健康險 船舶險 農業險 信用險 保證險 其他險
0 產險合計 2016-09 271668.28 2979.89 900.05 201922.92 496.02 537.98 4832.15 4167.16 29662.65 0.0 24160.47 196.39 1800.19 12.37
1 人財險 2016-09 121711.67 1542.56 566.86 76177.54 343.91 2.08 2611.88 522.27 25219.82 0.0 14491.42 196.18 37.16 0.00
2 太產險 2016-09 18134.41 488.14 42.89 12007.21 34.11 0.00 565.89 1586.64 2275.04 0.0 1130.95 0.00 3.54 0.00
3 平產險 2016-09 29834.30 452.68 14.49 28006.03 58.88 160.85 462.46 630.04 48.66 0.0 0.00 0.21 0.00 0.00

melt之前的bf的columns

Index(['zt', 'date', '合計', '企財險', '家財險', '車險', '貨運險', '工程險', '責任險', '短期意外險',
       '短期健康險', '船舶險', '農業險', '信用險', '保證險', '其他險'],
      dtype='object')

使用melt和pivot_table

#將zt,date變成index,列名(險種)變成了一個variable
bfm=pd.melt(bf,id_vars=['zt','date'])
#根據date列裡的元素變成若根列
bfp=bfm.pivot_table(index=['zt','variable'],columns='date').reset_index()

melt之後bfm

  zt date variable value
0 產險合計 2016-09 合計 271668.28
1 人財險 2016-09 合計 121711.67
2 太產險 2016-09 合計 18134.41
3 平產險 2016-09 合計 29834.30
4 華財險 2016-09 合計 0.00

pivot_table之後bfp

  zt date 2016-09 2017-09 2018-09
0 中聯合 企財險 38.57 83.80 135.91
1 中聯合 保證險 1.88 2.13 1.98
2 中聯合 信用險 0.00 0.00 0.00
3 中聯合 其他險 0.00 0.00 0.00
4 中聯合 農業險 7916.90 8131.71 7560.63