В 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?