【发布时间】:2020-01-21 00:26:12
【问题描述】:
给定一个带有 timedelta 的带时间戳的 df,显示所涵盖的时间,例如:
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 分钟显示一次退出的条形图?我想要的是一个条形图,它将在 Y 轴上显示 0 或 1,在上面涵盖的时间段内,每个 15 分钟段显示 1,而未涵盖的所有 15 分钟段显示 0。
我试过这个answer:
df['span'].astype('timedelta64[m]').plot.bar()
但是,这会垂直绘制每个时间跨度,并且并未显示 2019-09-19 20:00 的整个小时缺失。
我试过了
df['span'].astype('timedelta64[m]').plot()
它绘制以下不是很有用的。
我也试过这个answer,但无济于事。
更新
基于 lostCode 的 answer,我能够进一步修改 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'))
有没有更好、更有效的方法?
【问题讨论】:
标签: pandas datetime matplotlib time-series timespan