pandas-仅当缺少的时间窗口在timedelta限制之间时才对时间序列进行插值

时间:2018-07-23 18:14:05

标签: python pandas interpolation

我想使用pandas插值函数填充索引为日期时间的pandas系列的缺失值。

是否有一种方法可以仅在某些限制之间的间隙上应用插值函数?假设我们只想在小于datetime.timedelta(minutes = A)且大于datetime.timedelta(minutes = B)的间隙上使用它。

假设A = 30,B = 15,我们有了这个时间序列

2018-07-01 12:00:00    1
2018-07-01 12:05:00    nan
2018-07-01 12:10:00    3
2018-07-01 12:15:00    nan
2018-07-01 12:20:00    nan
2018-07-01 12:25:00    nan
2018-07-01 12:30:00    7
2018-07-01 12:35:00    8
2018-07-01 12:40:00    nan
2018-07-01 12:45:00    nan
2018-07-01 12:50:00    nan
2018-07-01 12:55:00    nan
2018-07-01 13:00:00    nan
2018-07-01 13:05:00    14

,我想拥有

2018-07-01 12:00:00    1
2018-07-01 12:05:00    nan
2018-07-01 12:10:00    3
2018-07-01 12:15:00    4
2018-07-01 12:20:00    5
2018-07-01 12:25:00    6
2018-07-01 12:30:00    7
2018-07-01 12:35:00    8
2018-07-01 12:40:00    nan
2018-07-01 12:45:00    nan
2018-07-01 12:50:00    nan
2018-07-01 12:55:00    nan
2018-07-01 13:00:00    nan
2018-07-01 13:05:00    14

就目前而言,我只找到了解决行数差距的解决方案...

谢谢!

1 个答案:

答案 0 :(得分:0)

我不确定这在一般情况下如何运作,但是您可以尝试以下方法:

import pandas as pd
import numpy as np
df = pd.DataFrame({"date": pd.date_range(start="2018-07-01 12:00:00",
                                         end="2018-07-01 13:05:00",
                                         freq="5min")})
df["value"] = np.arange(1, len(df)+1)
df["value"] = np.where(df.index.isin([1, 3, 4, 5, 8, 9, 10, 11, 12]),
                       np.nan,
                       df["value"])

# Interpolation
df["value"] = np.where((df.date.dt.minute >=15) & (df.date.dt.minute <=30),
                       df.value.interpolate(),
                       df.value)