从groupby数据框创建条形图

时间:2017-10-08 02:26:57

标签: python pandas matplotlib

  • 我已将数据转换为以下组,并在底部生成输出
  • 我不知道如何提取子级数据来创建两个表。一个用于PUT,另一个用于CALL。
    • x轴=罢工
    • y轴= oi sum
    • 我想用matplotlib将两个条形图叠加成一个。喜欢附图像

从下面的输出创建此图表的任何指针或更好的方法? enter image description here

df_OI = df[['oi','strike','type','expiry']].groupby([pd.Grouper(freq='D'),'strike','type','expiry']).agg(['sum'])

Created                                     oi
                                    sum
datetime   strike type expiry          
2017-09-29 130.0  PUT  2017-10-06    12
           145.0  PUT  2017-10-06    21
           147.0  PUT  2017-10-06     1
           149.0  PUT  2017-10-06     2
           150.0  CALL 2017-10-06     1
                  PUT  2017-10-06   111
           152.5  CALL 2017-10-06    12
                  PUT  2017-10-06   100
           155.0  CALL 2017-10-06    10
                  PUT  2017-10-06    66
           157.5  CALL 2017-10-06     8
                  PUT  2017-10-06    29
           160.0  CALL 2017-10-06    21
                  PUT  2017-10-06  1405
           162.5  CALL 2017-10-06    14
                  PUT  2017-10-06   327
           165.0  CALL 2017-10-06    56
                  PUT  2017-10-06  2383
           167.5  CALL 2017-10-06    12
                  PUT  2017-10-06  2804
           170.0  CALL 2017-10-06   354
                  PUT  2017-10-06  1945
           172.5  CALL 2017-10-06   438
                  PUT  2017-10-06  3022
           175.0  CALL 2017-10-06  3373
                  PUT  2017-10-06  2093
           177.5  CALL 2017-10-06  1688
                  PUT  2017-10-06  1201
           180.0  CALL 2017-10-06  8241
                  PUT  2017-10-06  2269
           182.5  CALL 2017-10-06  2152
                  PUT  2017-10-06   219
           185.0  CALL 2017-10-06  4008
                  PUT  2017-10-06   469
           187.5  CALL 2017-10-06  2006
                  PUT  2017-10-06   270
           190.0  CALL 2017-10-06  1354
                  PUT  2017-10-06    37
           192.5  CALL 2017-10-06   484
           195.0  CALL 2017-10-06   377
           197.5  CALL 2017-10-06    31
           200.0  CALL 2017-10-06   109
                  PUT  2017-10-06     3
           202.5  CALL 2017-10-06     5
           205.0  CALL 2017-10-06     5

1 个答案:

答案 0 :(得分:0)

因为我有bar列出的2列,所以我的总空间为2。所以我使用width=2使两个条的宽度都为2。

df.reset_index().set_index(['strike', 'type'])['sum'].unstack() \
  .plot.bar(width=2, alpha=.5, figsize=(10, 4), ec='white')

enter image description here