我有一个gappy时间序列存储在带有datetimeindex的pandas数据帧中。我现在想要确定时间序列中的间隙,以便识别连续的段以便单独处理它们(并且在某些情况下,将它们之间的间隙足够短的段粘合在一起)。
我可以通过两种主要方式来做到这一点。第一种是使用各种方法重新索引以获得常规时间序列并观察间隙区域中的填充NA值。在我的情况下,导致许多额外的行(即一些冗长的间隙)。然后,您仍需要执行额外步骤来识别连续段。
另一种方法,以及我目前正在使用的方法是使用np.diff来区分索引并使用np.where查找间隙。但是,有更多的本地熊猫方法吗?这似乎是一项相当普遍的任务。我注意到np.diff和pandas存在numpy和pandas版本的组合问题,因此最好只使用pandas解决方案。
什么是完美的将是像
for segment in data.continuous_segments():
# Process each segment
表示数据帧数据。
答案 0 :(得分:3)
这可能对您有用:
df = pd.DataFrame([["2015-01-01",1],["2015-01-02",1],[np.nan,1],[np.nan,1],["2015-01-10",1],["2015-01-11",1]], columns = ['timestamp','value'])
continuous_segments = df[df.timestamp.notnull()].groupby(df.timestamp.isnull().cumsum())
for segment in continuous_segments:
print (segment[1])
timestamp value
0 2015-01-01 1
1 2015-01-02 1
timestamp value
4 2015-01-10 1
5 2015-01-11 1