Учитывая временную метку df с timedelta, показывающую покрытое время, например:
df = pd.DataFrame(pd.to_timedelta(['00:45:00','01:00:00','00:30:00']).rename('span'),
index=pd.to_datetime(['2019-09-19 18:00','2019-09-19 19:00','2019-09-19 21:00']).rename('ts'))
# span
# ts
# 2019-09-19 18:00:00 00:45:00
# 2019-09-19 19:00:00 01:00:00
# 2019-09-19 21:00:00 00:30:00
Как я могу построить гистограмму, показывающую выпадения каждые 15 минут?Мне нужна гистограмма, которая будет показывать 0 или 1 на оси Y с 1 для каждого 15-минутного сегмента в охватываемых выше периодах времени и 0 для всех 15-минутных сегментов, не охватываемых.
В соответствии с этим ответом я пытался:
df['span'].astype('timedelta64[m]').plot.bar()
Тем не менее, это график каждого временного интервала по вертикали и не показывает, что отсутствует целый час 2019-09-19 20:00.
.
Я пытался
df['span'].astype('timedelta64[m]').plot()
Он показывает следующее, что не очень полезно.
Я также попробовал этот ответ безрезультатно.
Обновление
На основе ответа lostCode Мне удалось дополнительно изменить DataFrame следующим образом:
def isvalid(period):
for ndx, row in df.iterrows():
if (period.start_time >= ndx) and (period.start_time < row.end):
return 1
return 0
df['end']= df.index + df.span
ds = pd.period_range(df.index.min(), df.end.max(), freq='15T')
df_valid = pd.DataFrame(ds.map(isvalid).rename('valid'), index=ds.rename('period'))
Есть ли лучший, более эффективный способ сделать это?