Python 时间戳和包含时间增量值的数组的总和

Python 时间戳和包含时间增量值的数组的总和,python,arrays,numpy,pandas,time-series,Python,Arrays,Numpy,Pandas,Time Series,我有一个开始日期和一个数组,其中包含以天为单位的不规则样本值,我想将其用作熊猫系列的日期索引 比如: 现在,我可以使用一个列表和以下for循环来创建pandas日期时间序列: In [235]: all_dates = [] for stepsize in sample_size: days = pd.Timedelta(stepsize, 'D') all_dates.append(date + days)

我有一个开始日期和一个数组,其中包含以天为单位的不规则样本值,我想将其用作熊猫系列的日期索引

比如:

现在,我可以使用一个列表和以下for循环来创建pandas日期时间序列:

In [235]: all_dates = []
          for stepsize in sample_size:
              days = pd.Timedelta(stepsize, 'D')
              all_dates.append(date + days)
          pd.Series(all_dates)
Out[235]: 2015-10-17 08:00:00
          2015-10-27 08:00:00
          2015-10-30 08:00:00
          2015-11-05 08:00:00
          2015-11-16 08:00:00
          dtype: datetime64[ns]
但我希望有一个纯粹的numpy或pandas解决方案,而不需要列表和for循环

In [11]:
pd.Series(pd.TimedeltaIndex(sample_size , unit = 'D') + date)
Out[11]:
0   2015-10-17 08:00:00
1   2015-10-27 08:00:00
2   2015-10-30 08:00:00
3   2015-11-05 08:00:00
4   2015-11-16 08:00:00
dtype: datetime64[ns]
首先,您需要为要添加到日期中的所有值创建一个时间增量,请注意,我已将
D
指定为一个参数,这意味着我们需要时间增量频率以天为单位,因为我们要将天添加到日期中

In [42]:
time_delta = pd.TimedeltaIndex(sample_size, unit = 'D')
time_delta
Out[42]:
TimedeltaIndex(['0 days', '10 days', '13 days', '19 days', '30 days'], dtype='timedelta64[ns]', freq=None)
然后,为了将时间增量添加到日期中,您需要满足两个条件,首先需要创建日期的
时间序列
,以便以后可以向其添加时间增量,第二件事是新创建的
时间序列
必须具有与
时间增量
相同数量的元素,这可以通过
重复(len(样本大小)


这似乎是可行的,所以首先必须创建一个长度等于
date
的系列,长度为
sample\u size
。仍然有点麻烦。我添加了一些解释来详细说明此解决方案的工作原理。您不需要手动广播,只需添加它们,它就可以工作
series(pd.to\u timedelta(样本大小,单位为D')+日期)
In [42]:
time_delta = pd.TimedeltaIndex(sample_size, unit = 'D')
time_delta
Out[42]:
TimedeltaIndex(['0 days', '10 days', '13 days', '19 days', '30 days'], dtype='timedelta64[ns]', freq=None)
In [40]:
time_stamp = pd.Series(np.array(date).repeat(len(sample_size)))
time_stamp
Out[40]:
0   2015-10-17 08:00:00
1   2015-10-17 08:00:00
2   2015-10-17 08:00:00
3   2015-10-17 08:00:00
4   2015-10-17 08:00:00
dtype: datetime64[ns]

In [41]:
time_stamp + time_delta
Out[41]:
0   2015-10-17 08:00:00
1   2015-10-27 08:00:00
2   2015-10-30 08:00:00
3   2015-11-05 08:00:00
4   2015-11-16 08:00:00
dtype: datetime64[ns]