基于熊猫数据帧中 NaN 的两个邻居(上方和下方或左侧和右侧)的线性插值



我有一个数据框架,其中一列的浮点值和时间戳,索引类似于下面的索引。索引中的所有时间戳均以升序排序。

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如果速度对您至关重要,则在这里有更快的解决方案。

相关内容

  • 没有找到相关文章

最新更新