gpt4 book ai didi

python - 获取多个日期时间对的日期范围

转载 作者:太空宇宙 更新时间:2023-11-04 02:39:25 25 4
gpt4 key购买 nike

给定一个形状为 (n, 2) 的日期时间数组:

x = np.array([['2017-10-02T00:00:00.000000000', '2017-10-12T00:00:00.000000000']], dtype='datetime64[ns]') 

x 的形状是 (1, 2),但实际上它可能是 (n, 2), n > = 1。在每一对中,第一个日期总是小于(或等于)第二个。我想获取 x 中每对日期之间的所有日期范围的列表。这就是我基本上在做的事情:

np.concatenate([pd.date_range(*y, closed='right') for y in x])

它起作用了,给了

array(['2017-10-03T00:00:00.000000000', '2017-10-04T00:00:00.000000000',
'2017-10-05T00:00:00.000000000', '2017-10-06T00:00:00.000000000',
'2017-10-07T00:00:00.000000000', '2017-10-08T00:00:00.000000000',
'2017-10-09T00:00:00.000000000', '2017-10-10T00:00:00.000000000',
'2017-10-11T00:00:00.000000000', '2017-10-12T00:00:00.000000000'], dtype='datetime64[ns]')

但是由于 list comp 的原因,这非常慢 - 它并没有像我想要的那样完全矢量化。我想知道是否有更好的方法来获取多对日期的日期范围?

我会根据需要提供尽可能多的说明。谢谢。

最佳答案

有点复杂...
但是

d = np.array(1, dtype='timedelta64[D]')
x = x.astype('datetime64[D]')
deltas = np.diff(x, axis=1) / d
np.concatenate([
i + np.arange(j + 1) for i, j in zip(x[:, 0], deltas[:, 0].astype(int))
]).astype('datetime64[ns]')

array(['2017-10-02T00:00:00.000000000', '2017-10-03T00:00:00.000000000',
'2017-10-04T00:00:00.000000000', '2017-10-05T00:00:00.000000000',
'2017-10-06T00:00:00.000000000', '2017-10-07T00:00:00.000000000',
'2017-10-08T00:00:00.000000000', '2017-10-09T00:00:00.000000000',
'2017-10-10T00:00:00.000000000', '2017-10-11T00:00:00.000000000',
'2017-10-12T00:00:00.000000000'], dtype='datetime64[ns]')

工作原理

  • d代表一天
  • x 变成没有时间戳的日期
  • diff 获取天数差异...但在 timedelta 空间
  • 我除以我的 d,它也在 timedelta 空间中,尺寸消失了......留下我的 float 我转换到int
  • 当我将 x[:, 0] 对的第一列添加到一个整数数组时,我得到一个广播,其中添加了 x< 的任何维度的 1 个单位,即 datetime64[D]。所以我要加一天。

源自/受@hpaulj 启发
如果他们发布答案将删除

d = np.array(1, dtype='timedelta64[D]')
np.concatenate([np.arange(row[0], row[1] + 1, d) for row in x])

array(['2017-10-02T00:00:00.000000000', '2017-10-03T00:00:00.000000000',
'2017-10-04T00:00:00.000000000', '2017-10-05T00:00:00.000000000',
'2017-10-06T00:00:00.000000000', '2017-10-07T00:00:00.000000000',
'2017-10-08T00:00:00.000000000', '2017-10-09T00:00:00.000000000',
'2017-10-10T00:00:00.000000000', '2017-10-11T00:00:00.000000000',
'2017-10-12T00:00:00.000000000'], dtype='datetime64[ns]')

关于python - 获取多个日期时间对的日期范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46968623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com