在 pandas 中建立索引的时间范围

Time range to index in pandas

对于每个数据点(在此示例中为 a 和 b),指定了其具体发生时间范围:

pd.DataFrame([
    {'from': pd.Timestamp('2020-01-01'), 'to': pd.Timestamp('2020-01-05')}, 
    {'from': pd.Timestamp('2020-01-02'), 'to': pd.Timestamp('2020-01-03')}
], index=['a', 'b'])

我想统计,例如,当数据点随时间处于活动状态时:

2020-01-01    1
2020-01-02    2
2020-01-03    2
2020-01-04    1
2020-01-05    1

是否有任何方便的方法将一个周期(时间范围)合并到一个DateTimeIndex,以便于绘图或计数?

方法如下:

from itertools import chain
pd.Series(chain(*[pd.date_range(i, j, freq='D') for i,j in zip(df['from'], df['to'])]))\
  .value_counts().sort_index().plot()

输出:

哦,还有另一种很好的方法使用 explode,不是吗?

df.apply(lambda x: pd.date_range(x['from'], x['to'], freq='D'), axis=1).explode()