Pandas 具有自定义持续时间的时间段

Pandas Period with custom duration

阅读 pandas Period 对象的文档让我对是否有可能创建自定义 Period 感到困惑。按照习惯,我的意思是一个不遵循特定频率 dtype 的 Period,但是 PeriodIndex 中的每个 Period 代表一个开始时间戳和一个结束时间戳,这是手动定义的。

举例说明:

假设我有 n 个时间间隔 t,其中每个间隔的开始和结束是来自离散均匀分布随机数的样本具有 beginning < end 约束的变量。

结果看起来像这样:

[(ts_start0, ts_end0), (ts_start1, ts_end1), (ts_start2, ts_end2))]

有没有什么方法可以用 Pandas Period 或类似的东西来编码这样的 "random" 间隔/时间跨度/周期?

我想你可以使用 IntervalIndex:

In [18]: pd.IntervalIndex([pd.Interval(1,3), pd.Interval(4, 11), pd.Interval(13, 28)])
Out[18]:
IntervalIndex([(1, 3], (4, 11], (13, 28]]
              closed='right',
              dtype='interval[int64]')

使用时间戳:

In [25]: pd.IntervalIndex([
    ...:   pd.Interval(pd.to_datetime('2018-01-01'), pd.to_datetime('2018-01-13')),
    ...:   pd.Interval(pd.to_datetime('2018-03-08'), pd.to_datetime('2018-04-29')),
    ...:   pd.Interval(pd.to_datetime('2018-05-03'), pd.to_datetime('2018-07-22'))
    ...: ])
    ...:
Out[25]:
IntervalIndex([(2018-01-01, 2018-01-13], (2018-03-08, 2018-04-29], (2018-05-03, 2018-07-22]]
              closed='right',
              dtype='interval[datetime64[ns]]')

更新: 我们可以使用 pd.IntervalIndex.from_tuples() 构造函数:

In [16]: pd.IntervalIndex.from_tuples([(1,3), (4, 11), (13, 28)], closed='right')
Out[16]:
IntervalIndex([(1, 3], (4, 11], (13, 28]]
              closed='right',
              dtype='interval[int64]')