2

我正在尝试创建一个新的数据框,该数据框源自旋转该数据框:

                 dataframe name      date tenor mat strike      capvol
      0   EUR CapFloor Volat_3m  20120903    3m  1y   0.25  152.202160
      1   EUR CapFloor Volat_3m  20120903    3m  1y   0.50  151.969370
      2   EUR CapFloor Volat_3m  20120903    3m  1y      1  149.266970
      3   EUR CapFloor Volat_3m  20120903    3m  1y   1.50  152.940750
      4   EUR CapFloor Volat_3m  20120903    3m  1y      2  157.229350
      5   EUR CapFloor Volat_3m  20120903    3m  1y   2.25  159.325890

我的目标是按日期、垫子和罢工对数据进行分组(我可以删除“3m”和“数据框名称”列,因为它们对所有数据都是通用的)。我尝试使用以下命令:

      df = frame.pivot('date','mat','strike')

但得到这个错误:

      'Index contains duplicate entries, cannot reshape'

尽管我检查了我的数据并且在行上不包含重复项。

任何人都可以帮助我解决这个问题,或者提出一种替代枢轴功能的方法吗?

谢谢你的帮助

4

1 回答 1

3

也许set_index是你想要的?pivot是一个重塑操作:

In [4]: frame.set_index(['date', 'mat', 'strike'])
Out[4]: 
                            dataframe name tenor     capvol
date     mat strike                                        
20120903 1y  0.25    EUR CapFloor Volat_3m    3m  152.20216
             0.50    EUR CapFloor Volat_3m    3m  151.96937
             1.00    EUR CapFloor Volat_3m    3m  149.26697
             1.50    EUR CapFloor Volat_3m    3m  152.94075
             2.00    EUR CapFloor Volat_3m    3m  157.22935
             2.25    EUR CapFloor Volat_3m    3m  159.32589


In [7]: df.capvol.unstack('mat')
Out[7]: 
mat                     1y
date     strike           
20120903 0.25    152.20216
         0.50    151.96937
         1.00    149.26697
         1.50    152.94075
         2.00    157.22935
         2.25    159.32589
于 2012-09-11T12:13:43.993 回答