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

猜你喜欢

转载自blog.csdn.net/sharkandshark/article/details/83144234