Interpolation on DataFrame in pandas

后端 未结 2 526
梦谈多话
梦谈多话 2020-11-29 00:41

I have a DataFrame, say a volatility surface with index as time and column as strike. How do I do two dimensional interpolation? I can reindex but how do i deal

2条回答
  •  忘掉有多难
    2020-11-29 00:59

    Old thread but thought I would share my solution with 2d extrapolation/interpolation, respecting index values, which also works on demand. Code ended up a bit weird so let me know if there is a better solution:

    import pandas
    from   numpy import nan
    import numpy
    
    dataGrid = pandas.DataFrame({1: {1: 1, 3: 2},
                                 2: {1: 3, 3: 4}})
    
    
    def getExtrapolatedInterpolatedValue(x, y):
        global dataGrid
        if x not in dataGrid.index:
            dataGrid.ix[x] = nan
            dataGrid = dataGrid.sort()
            dataGrid = dataGrid.interpolate(method='index', axis=0).ffill(axis=0).bfill(axis=0)
    
        if y not in dataGrid.columns.values:
            dataGrid = dataGrid.reindex(columns=numpy.append(dataGrid.columns.values, y))
            dataGrid = dataGrid.sort_index(axis=1)
            dataGrid = dataGrid.interpolate(method='index', axis=1).ffill(axis=1).bfill(axis=1)
    
        return dataGrid[y][x]
    
    
    print getExtrapolatedInterpolatedValue(2, 1.4)
    >>2.3
    

提交回复
热议问题