在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中有数千个组,整个数据框有1000万行。
有没有一种快速的方法可以对组进行插值? 我尝试了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中最快的组内插值吗?