数据透视表在Pandas中返回一个键错误

时间:2017-11-21 21:21:44

标签: python pandas

我有一个名为performanceData的数据框,如下所示:

                         id  settle_price  settle_price_acc     pos    trade  \
date                                                                           
2016-01-04  BBG.XTKS.9716.S     14.096973         14.096973  8100.0  -1700.0   
2016-01-04  BBG.XTKS.9065.S      4.460498          4.460498  4000.0  20000.0   
2016-01-04  BBG.XTKS.7966.S     17.599029         17.599029  -500.0  27700.0   
2016-01-04  BBG.XTKS.3774.S     19.514999         19.514999     0.0    200.0   
2016-01-04  BBG.XTKS.5110.S     15.143828         15.143828  -200.0      0.0   

            nominal_posn_size  abs_nominal_posn_size  abs_nominal_trade_size  
date                                                                          
2016-01-04      114185.481138          114185.481138            23964.854066  
2016-01-04       17841.990960           17841.990960            89209.954800  
2016-01-04       -8799.514730            8799.514730           487493.116042  
2016-01-04           0.000000               0.000000             3902.999806  
2016-01-04       -3028.765682            3028.765682                0.000000

数据框很大,并且有过去10年的日期(以上是头部)。我正在尝试在日期创建一个数据透视表(例如,为每个日期汇总所有abs_nominal_trade_size值。但是我得到一个关键错误

KeyError: 'date'

当我尝试使用以下代码转动日期时:

 e = performanceData.pivot_table(index='date', columns=['abs_nominal_trade_size','abs_nominal_posn_size','nominal_posn_size'], values='Value')

1 个答案:

答案 0 :(得分:1)

让我们试试:

performanceData.reset_index()\
               .pivot_table(index='date', 
                            values=['abs_nominal_trade_size',
                                     'abs_nominal_posn_size',
                                     'nominal_posn_size'],
                             aggfunc='sum')

输出:

            abs_nominal_posn_size  abs_nominal_trade_size  nominal_posn_size
date                                                                        
2016-01-04           143855.75251           604570.924714      120199.191686