我有一个开始日期和一个包含天数不规则样本值的数组,我想将其用作 pandas 系列的日期索引。
喜欢:
In [233]: date = pd.Timestamp('2015-10-17 08:00:00')
Out[233]: Timestamp('2015-10-17 08:00:00')
In [234]: sample_size = np.array([0,10,13,19,30])
Out[234]: array([ 0., 16., 32., 48., 64.])
现在我可以使用列表和以下 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)
然后,为了将时间增量添加到日期中,您需要满足两个条件,首先您需要创建一个 timeseries
您的日期,以便稍后您可以添加时间增量,第二件事是新创建的 timeseries
必须具有与您的 timedelta
相同数量的元素,这可以通过 repeat(len(sample_size)
来实现
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]
关于python - pandas 时间戳和包含 timedelta 值的数组的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33752747/