如何从熊猫中的dateTimeIndex中获取滚动窗口内的持续时间



我正在尝试计算此数据的每个滑动窗口内的持续时间:

                                ID  
    DATE            
    2017-05-17 15:49:51         2   
    2017-05-17 15:49:52         5   
    2017-05-17 15:49:55         2   
    2017-05-17 15:49:56         3   
    2017-05-17 15:49:58         5
    2017-05-17 15:49:59         5

在此示例中, DATE是索引,我正在尝试将尺寸3的滚动窗口内的持续时间相互重叠。答案应该是这样:

                                ID      duration    
    DATE            
    2017-05-17 15:49:51         2        4  
    2017-05-17 15:49:52         5        4  
    2017-05-17 15:49:55         2        3  
    2017-05-17 15:49:56         3        3  
    2017-05-17 15:49:58         5        NaN
    2017-05-17 15:49:59         5        NaN

我尝试了:

df['duration'] = df.rolling(window=3).apply(df.index.max()-df.index.min())

但是我有一个错误:

TypeError: 'DatetimeIndex' object is not callable
df.reset_index(inplace=True)    
df['PREVIOUS_TIME']= df.DATE.shift(-2)
df['duration']=(df.PREVIOUS_TIME-df.DATE)/np.timedelta64(1,'s')
df.drop('PREVIOUS_TIME',axis=1,inplace=True)
df.set_index('DATE',inplace=True)

假设"日期"是日期。

def timediff(time_window: pd.Series) -> float:
    duration = time_window.index.max() - time_window.index.min() 
    return duration.total_seconds()
df['duration'] = np.nan
df['duration'] = df.duration.rolling(window=3).apply(func=timediff, raw=False)

我只是偶然发现了这个问题,并想使用滚动窗口方法提供解决方案:
使用raw=False(默认),您可以为该功能提供系列,因此您可以使用index.max() - index.min()index[-1] - index[0]
唯一的问题是您需要返回一个数字,而不是timedelta对象。

最新更新