在时间之间用时间戳标记行

时间:2018-10-20 23:32:36

标签: pandas timestamp

我需要标记时间在给定时间段之间的时间序列中的行;当我有例如

values = ([ 'motorway' ] * 5000) + ([ 'link' ] * 300) + ([ 'motorway' ] * 7000)

df = pd.DataFrame.from_dict({
  'timestamp': pd.date_range(start='2018-1-1', end='2018-1-2', freq='s').tolist()[:len(values)],
  'road_type': values,
})
df.set_index('timestamp', inplace=True)

我需要添加一列rush来标记其中timestamp06:0009:0015:3019:00之间的行。我见过between_time,但我不知道如何在这里应用它。

编辑:基于this answer,我设法将

df['rush'] = df.index.isin(df.between_time('00:00:15', '00:00:20', include_start=True, include_end=True).index) | df.index.isin(df.between_time('00:00:54', '00:00:59', include_start=True, include_end=True).index)

但我想知道是否还有更优雅的方式。

1 个答案:

答案 0 :(得分:0)

使用between

的另一种选择
'MNE'

或使用'E'切片from datetime import time as t values = ([ 'motorway' ] * 5000) + ([ 'link' ] * 300) + ([ 'motorway' ] * 7000) df = pd.DataFrame.from_dict({ 'timestamp': pd.date_range(start='2018-1-1', end='2018-1-2', freq='s').tolist()[:len(values)], 'road_type': values, }) time = df['timestamp'].dt.time df['rush'] = (time.between(t(0,6,0), t(0,9,0)) | time.between(t(0,15,30),t(0,19,0))).values

df