【问题标题】:Output the distance in time in NEGATIVE number to create sequence以 NEGATIVE 数字输出时间距离以创建序列
【发布时间】:2019-04-17 03:48:21
【问题描述】:

项目需要一点帮助。

我有两个列表,每个列表包含 4 个或更多特定周 - 真_SH:

[Timestamp('2012-01-08 00:00:00'), Timestamp('2012-04-22 00:00:00'), Timestamp('2012-08-19 00:00:00'), Timestamp('2012-10-07 00:00:00')

True_SL:

[Timestamp('2011-11-20 00:00:00'), Timestamp('2012-03-25 00:00:00'), Timestamp('2012-05-13 00:00:00'), Timestamp('2012-09-02 00:00:00')

它们交替出现,不可能有两个 SL 或 SH 一个接一个,在这个例子中:

SL->SH->SL->SH->SL->SH->SL->SH

如何使用以下规则输出第三个列表中日期之间的周数距离 - 从 SL 到 SH 的距离产生正数,从 SH 到 SL 的距离输出负数周数?该数字应包括计数中的开始和结束周。

在此示例中,与前两个的距离: (1st)SL('2011-11-20 00:00:00') 到 (2nd) SH('2012-01-08 00:00:00') 输出正值 7,-> 从 2nd(SH) 到(3rd) SL('2012-03-25 00:00:00') 输出 NEGATIVE -10 ,然后从 3rd(SL) 到 4th(SH) 再次输出正数,然后从 SH 到 SL 输出负数,依此类推。

我需要这个列表来进一步分析是否有重复序列。

真的希望任何人都可以帮助我,因为我正在努力寻找一种方法来做到这一点。

谢谢!

【问题讨论】:

  • 你能告诉我们你已经尝试过的代码吗?也许是输入数据块和输出数据块?

标签: python date datetime time time-series


【解决方案1】:

我的做法是合并两个数组,对合并后的数组进行排序,然后遍历合并后的数组,计算相邻日期之间的周数。然后,您可以测试两个相邻日期中较大的一个,以查看它来自哪个原始列表,如果它来自 true_sl 列表,则返回一个负值。

请注意,我对合并列表进行排序的选择假定 true_sh 和 true_sl 列表中的日期将始终交错。

代码如下:

from datetime import datetime


true_sh = [datetime(2012, 1, 8), datetime(2012, 4, 22), datetime(2012, 8, 19), datetime(2012, 10, 7)]
true_sl = [datetime(2011, 11, 20), datetime(2012, 3, 25), datetime(2012, 5, 13), datetime(2012, 9, 2)]

out_array = true_sh
out_array.extend(true_sl)
out_array.sort()

for i, elem in enumerate(out_array):
    if i == 0:
        continue

    num_days = elem - out_array[i - 1]
    num_weeks = num_days.days // 7
    if elem in true_sl:
        num_weeks = -num_weeks

    print(num_weeks)

这是输出:

7
-11
4
-3
14
-2
5

另请注意,您将预期的第二个输出作为 -10,但是从 2012 年 1 月 8 日到 2012 年 3 月 25 日之间有 77 天,所以我相信 -11 的输出是正确的。请确认一下好吗?

【讨论】:

  • 没有想到这个办法。绝对精彩!它完美地工作。是的,确实 77 天确实是 11 周,而不是 10 周,计数是从一周中的特定日期开始的,这就是为什么它显示为 10。非常感谢。
  • 不客气。我很高兴它对你有用。如果您对它满足您的需求感到满意,请不要忘记将答案标记为已接受的解决方案。
  • 标记!再次感谢您,先生!
猜你喜欢
  • 2014-09-19
  • 2018-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多