Выведите расстояние во времени в отрицательном числе, чтобы создать последовательность - PullRequest
0 голосов
/ 14 ноября 2018

Нужна небольшая помощь для проекта.

У меня есть два списка, каждый из которых содержит 4 или более конкретных недель - True_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) до (3-е) SL ('2012-03-25 00:00:00') выводит ОТРИЦАТЕЛЬНОЕ -10, затем с 3-го (SL) на 4-е (SH) снова выводит положительное число, а затем с SH на SL отрицательное и так далее.

Мне нужен этот список для дальнейшего анализа, если есть повторяющиеся последовательности.

Действительно надеюсь, что кто-нибудь может мне помочь, так как я изо всех сил пытаюсь найти способ сделать это.

Спасибо!

1 Ответ

0 голосов
/ 14 ноября 2018

Мой подход заключается в объединении двух массивов, сортировке объединенного массива, а затем итерации по объединенному массиву для вычисления количества недель между соседними датами.Затем вы можете проверить большую из двух соседних дат, чтобы увидеть, из какого исходного списка он получен, и вернуть отрицательное значение, если оно пришло из списка 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

Обратите внимание, чтоВы дали ожидаемый 2-й результат как -10, но между 8 января 2012 года и 25 марта 2012 года есть 77 дней, поэтому я считаю, что вывод здесь -11 является правильным.Можете ли вы подтвердить, пожалуйста?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...