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 に答える