Python самая быстрая групповая интерполяция - PullRequest
0 голосов
/ 27 ноября 2018

В Python у меня есть данные, которые выглядят так:

data = pd.DataFrame({'currency':['EUR', 'EUR', 'EUR', 'EUR', 'USD', 'USD', 'USD', 'USD'], 
                   'tenor':[1, 2, 5, 10, 1, 2, 5, 10],
                   'value':[10, 20, np.nan, 100, 1, 2, 3, np.nan]})

Я хочу группировать по валютам и линейно интерполировать NaN на основе тенора, т.е. я хочу достичь

data.index = data['tenor']
data['value'] = data.groupby('currency')['value'].apply(lambda x: x.interpolate('values'))

Проблема в том, что интерполировать в пандах очень медленно.У меня несколько тысяч групп внутри groupby, а весь фрейм данных содержит 10 миллионов строк.

Существует ли быстрый способ интерполяции групп?Я пробовал numpy

result = data.groupby('currency')[['tenor', 'value']].apply(lambda x: list(fun(x['tenor'].values, x['value'].values)))

, где

def fun(x, y):
    isNaN = np.isnan(y)
    return np.interp(x, x[~isNaN], y[~isNaN])

, что быстрее, но не так много.

Можете ли вы порекомендовать самую быструю внутригрупповую интерполяцию в Python?

...