我有一个数据框架,其中一列的浮点值和时间戳,索引类似于下面的索引。索引中的所有时间戳均以升序排序。
timestamp value
2014-01-08 08:00:42 1
2014-01-08 08:01:00 NaN
2014-01-08 08:01:12 3
2014-01-08 08:01:52 7
2014-01-08 08:02:02 9
我如何在1和3值上线性插值/基于NAN值"仅"(即高于和低于值)。数据框架很大,最多可以运行2 GB。因此,速度对于此操作很重要
谢谢
编辑:您根据索引的时间戳差异将问题更新为插值,将这些比例应用于您的数据框架值。
这是一种实际上应该很快的粗略方法:
ts = pd.to_datetime(['2014-01-08 08:00:42',
'2014-01-08 08:01:00',
'2014-01-08 08:01:12',
'2014-01-08 08:01:52',
'2014-01-08 08:02:02'])
df = pd.DataFrame([1, np.nan, 3, 7, 9], index=ts, columns=['value'])
td = df.index.to_series().diff().dt.total_seconds()
interp = df.value.shift(1) + (df.value.shift(-1) - df.value.shift(1))
* td / (td.shift(-1) + td)
df['value'] = df['value'].fillna(interp)
print(df)
value
2014-01-08 08:00:42 1.0
2014-01-08 08:01:00 2.2
2014-01-08 08:01:12 3.0
2014-01-08 08:01:52 7.0
2014-01-08 08:02:02 9.0
在此示例中,第二个位置的NAN具有时间差的差异,分别低于下方18个单位和12个单位。因此,应该用值1 (3-1) *(18/(18 12))填充。
您也可以简化该数学。
另一件事是:在处理这个答案时,我问了一个关于计算时间室的问题。@pirsquared如果速度对您至关重要,则在这里有更快的解决方案。