在 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()
对于每个数据点(在此示例中为 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()