使用插值填充多索引Pandas DataFrame

时间:2014-12-24 17:12:44

标签: python pandas interpolation

我希望使用{{bfillffill包含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

问题是,如何根据索引填充多索引数据框的每个子部分?

1 个答案:

答案 0 :(得分:3)

我尝试在IndexType级别的索引处取消堆叠数据框。

df.unstack(level=1)

通过这种方式,您应该获得一个索引数据框,该数据框将调用和放置类别移动到列。也许它不是解决问题的最优雅方式,但它应该解决问题,而不是让看跌/看涨期权重叠。

如果多索引df是进一步计算的最佳索引,则可以使用堆栈方法恢复原始格式。