如何从 Pandas 中的 DatetimeIndex 获取滚动 window 中的持续时间
How to get the duration inside the rolling window from he DatetimeIndex in Pandas
我正在尝试为该数据计算每个滑动 window 内的持续时间:
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 的滚动 window 内相互重叠的持续时间。答案应该是这样的:
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)
假设 'DATE' 是一个日期时间。
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)
我刚刚偶然发现了这个问题,想提供一个使用滚动 window 方法的解决方案:
使用 raw=False
(默认),您为函数提供了一个系列,因此您可以使用 index.max() - index.min()
或 index[-1] - index[0]
唯一的问题是您需要 return 一个数字而不是 timedelta 对象。
我正在尝试为该数据计算每个滑动 window 内的持续时间:
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 的滚动 window 内相互重叠的持续时间。答案应该是这样的:
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)
假设 'DATE' 是一个日期时间。
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)
我刚刚偶然发现了这个问题,想提供一个使用滚动 window 方法的解决方案:
使用 raw=False
(默认),您为函数提供了一个系列,因此您可以使用 index.max() - index.min()
或 index[-1] - index[0]
唯一的问题是您需要 return 一个数字而不是 timedelta 对象。