18

我需要代表一系列事件。这些事件有点不寻常,因为它们是:

  • 不连续
  • 不重叠
  • 不规则的持续时间

例如:

  • 1200 - 1203
  • 1210 - 1225
  • 1304 - 1502

我想使用来表示这些事件,Pandas.PeriodIndex但我不知道如何创建Period持续时间不规则的对象。

我有两个问题:

  1. 有没有办法Period使用现有的 Pandas 功能创建持续时间不规则的对象?
  2. 如果没有,您能否建议如何修改 Pandas 以提供不规则的持续时间Period对象?(此评论表明可能“使用具有适当制作的 onOffset、前滚、回滚和应用方法的自定义 DateOffset 类”)

笔记

  1. 的文档字符串Period表明可以指定任意持续时间,例如5T“5 分钟”。我相信这个文档字符串是不正确的。运行pd.Period('2013-01-01', freq='5T')会产生异常ValueError: Only mult == 1 supported。我已经报告了这个问题
  2. Pandas 文档中的“时间戳与时间跨度”部分指出“对于常规时间跨度,pandas 将Period对象用于标量值和PeriodIndex跨度序列。未来版本中将提供对具有任意起点和终点的不规则间隔的更好支持. ”(我的重点)

更新 1

使用自定义持续时间构建一个Period看起来非常简单。 我认为主要的绊脚石将是说服PeriodIndex接受Periods不同的freqs. 例如:

In [93]: pd.PeriodIndex([pd.Period('2000', freq='D'), 
                         pd.Period('2001', freq='T')])

ValueError: 2001-01-01 00:00 is wrong freq

看起来一个中心假设PeriodIndex是每个 Period 都具有相同的freq.

4

2 回答 2

1

根据应用程序的不同,一种可能的解决方案是通过创建一个 PeriodIndex 来对您的数据进行分箱,该 PeriodIndex 的周期等于您处理数据所需的最小时间分辨率单位,然后在每个事件的分箱中划分数据,剩下的垃圾箱为空。

于 2017-07-14T01:28:11.450 回答
1

如果您的时间段为分钟,则必须通过日期时间,包括如下分钟:

pd.PeriodIndex([pd.Period('2000-01-01 00:00', freq='T'), 
                     pd.Period('2001-01-01 00:00', freq='T')])

结果:

PeriodIndex(['2000-01-01 00:00', '2001-01-01 00:00'], dtype='period[T]', freq='T')
于 2018-02-04T22:25:47.517 回答