我希望使用{{bfill
和ffill
包含DataFrame
的多索引NaN
(在本例中为ImpVol
字段) 1}}方法。 interpolate
的一部分可能如下所示:
DataFrame
对于那些不熟悉域名的人,我正在插入缺失(或不好)的隐含期权波动率。这些需要通过到期和选项类型组合在整个行程中进行插值,并且不能在整个选项群中进行插值。例如,我必须分别在Expiration OptionType Strike ImpVol
2014-12-26 call 140.0 NaN
145.0 NaN
147.0 NaN
149.0 NaN
150.0 NaN
152.5 NaN
155.0 0.233631
157.5 0.206149
160.0 0.149118
162.5 0.110867
165.0 0.110047
167.5 NaN
170.0 NaN
172.5 NaN
175.0 NaN
177.5 NaN
180.0 NaN
187.5 NaN
192.5 NaN
put 132.0 NaN
135.0 NaN
140.0 NaN
141.0 NaN
142.0 0.541311
143.0 NaN
144.0 0.546672
145.0 0.504691
146.0 0.485586
147.0 0.426898
148.0 0.418084
149.0 0.405254
150.0 0.372353
152.5 0.311049
155.0 0.246892
157.5 0.187426
160.0 0.132475
162.5 0.098377
165.0 NaN
167.5 0.249519
170.0 0.270546
180.0 NaN
182.5 0.634539
185.0 0.656332
187.5 0.711593
2015-01-02 call 145.0 NaN
146.0 NaN
149.0 NaN
150.0 NaN
152.5 NaN
155.0 0.213742
157.5 0.205705
160.0 0.160824
162.5 0.143180
165.0 0.129292
167.5 0.127415
170.0 0.148275
172.5 NaN
175.0 NaN
180.0 NaN
182.5 NaN
195.0 NaN
put 135.0 0.493639
140.0 0.463828
141.0 0.459619
142.0 0.442729
143.0 0.431823
145.0 0.391141
147.0 0.313090
148.0 0.310796
149.0 0.296146
150.0 0.280965
152.5 0.240727
155.0 0.203776
157.5 0.175431
160.0 0.143198
162.5 0.121621
165.0 0.105060
167.5 0.160085
170.0 NaN
2014-12-26
选项中插入call
2014-12-26
选项。
我之前选择了一段值来插值,如下所示:
put
但框架可能非常大,我想避免遍历每个索引。如果我使用optype = 'call'
expiry = '2014-12-26'
s = df['ImpVol'][expiry][optype].interpolate().ffill().bfill()
方法填充而不选择切片(即整个帧),interpolate
将插入所有子索引,这是我不想要的。例如:
interpolate
问题是,如何根据索引填充多索引数据框的每个子部分?
答案 0 :(得分:3)
我尝试在IndexType级别的索引处取消堆叠数据框。
df.unstack(level=1)
通过这种方式,您应该获得一个索引数据框,该数据框将调用和放置类别移动到列。也许它不是解决问题的最优雅方式,但它应该解决问题,而不是让看跌/看涨期权重叠。
如果多索引df是进一步计算的最佳索引,则可以使用堆栈方法恢复原始格式。