Интерполировать (или экстраполировать) только небольшие пробелы в кадре данных панд

У меня есть pandas DataFrame со временем в качестве индекса (1 мин Freq) и несколько столбцов данных. Иногда данные содержат NaN. Если это так, я хочу интерполировать, только если разрыв не превышает 5 минут. В этом случае это будет максимум 5 последовательных NaN. Данные могут выглядеть следующим образом (несколько тестовых случаев, которые показывают проблемы):

import numpy as np
import pandas as pd
from datetime import datetime

start = datetime(2014,2,21,14,50)
data = pd.DataFrame(index=[start + timedelta(minutes=1*x) for x in range(0, 8)],
                         data={'a': [123.5, np.NaN, 136.3, 164.3, 213.0, 164.3, 213.0, 221.1],
                               'b': [433.5, 523.2, 536.3, 464.3, 413.0, 164.3, 213.0, 221.1],
                               'c': [123.5, 132.3, 136.3, 164.3] + [np.NaN]*4,
                               'd': [np.NaN]*8,
                               'e': [np.NaN]*7 + [2330.3],
                               'f': [np.NaN]*4 + [2763.0, 2142.3, 2127.3, 2330.3],
                               'g': [2330.3] + [np.NaN]*7,
                               'h': [2330.3] + [np.NaN]*6 + [2777.7]})

Это звучит так:

In [147]: data
Out[147]: 
                         a      b      c   d       e       f       g       h
2014-02-21 14:50:00  123.5  433.5  123.5 NaN     NaN     NaN  2330.3  2330.3
2014-02-21 14:51:00    NaN  523.2  132.3 NaN     NaN     NaN     NaN     NaN
2014-02-21 14:52:00  136.3  536.3  136.3 NaN     NaN     NaN     NaN     NaN
2014-02-21 14:53:00  164.3  464.3  164.3 NaN     NaN     NaN     NaN     NaN
2014-02-21 14:54:00  213.0  413.0    NaN NaN     NaN  2763.0     NaN     NaN
2014-02-21 14:55:00  164.3  164.3    NaN NaN     NaN  2142.3     NaN     NaN
2014-02-21 14:56:00  213.0  213.0    NaN NaN     NaN  2127.3     NaN     NaN
2014-02-21 14:57:00  221.1  221.1    NaN NaN  2330.3  2330.3     NaN  2777.7

Я в курсеdata.interpolate() но у него есть несколько недостатков, так как он приводит к такому результату, который хорош для столбцов a-e, но для столбцов f-h он завершается ошибкой по разным причинам:

                         a      b      c   d       e       f       g  \
2014-02-21 14:50:00  123.5  433.5  123.5 NaN     NaN     NaN  2330.3   
2014-02-21 14:51:00  129.9  523.2  132.3 NaN     NaN     NaN  2330.3   
2014-02-21 14:52:00  136.3  536.3  136.3 NaN     NaN     NaN  2330.3   
2014-02-21 14:53:00  164.3  464.3  164.3 NaN     NaN     NaN  2330.3   
2014-02-21 14:54:00  213.0  413.0  164.3 NaN     NaN  2763.0  2330.3   
2014-02-21 14:55:00  164.3  164.3  164.3 NaN     NaN  2142.3  2330.3   
2014-02-21 14:56:00  213.0  213.0  164.3 NaN     NaN  2127.3  2330.3   
2014-02-21 14:57:00  221.1  221.1  164.3 NaN  2330.3  2330.3  2330.3   

                               h  
2014-02-21 14:50:00  2330.300000  
2014-02-21 14:51:00  2394.214286  
2014-02-21 14:52:00  2458.128571  
2014-02-21 14:53:00  2522.042857  
2014-02-21 14:54:00  2585.957143  
2014-02-21 14:55:00  2649.871429  
2014-02-21 14:56:00  2713.785714  
2014-02-21 14:57:00  2777.700000 

f) Разрыв состоит из 4-минутных значений NaN в начале, их следует заменить на это значение 2763,0 (т.е. экстраполировать в обратном направлении во времени).

g) промежуток больше 5 минут, но все равно он экстраполируется

h) Разрыв длиннее 5 минут, но разрыв все равно интерполируется.

Я понимаю эти причины, конечно, я нигде не указал, что он не должен интерполировать более длительные промежутки, чем 5 минут. Я это понимаюinterpolate только экстраполирует вперед во времени, но я хочу, чтобы он также экстраполировал назад во времени. Есть ли какие-либо известные методы, которые я могу использовать для решения своей проблемы, не изобретая велосипед?

Изменить: методdata.interpolate принимает входной параметрlimit, который определяет максимальное количество последовательных NaN, которые будут заменены интерполяцией. Но это все еще интерполирует до предела, но я хочу продолжить со всеми NaN в этом случае.

Ответы на вопрос(2)

Ваш ответ на вопрос