Я пытаюсь вытянуть последние 12 полных (с понедельника по воскресенье) недель, но у меня ничего не получается, потому что понедельник 2018-12-31 - это 53-я неделя 2018 года.
Я получаю старти даты окончания последних полных 12 недель:
### determine local time day of and day of week
today = dt.utcnow()
today = today.replace(tzinfo=timezone.utc).astimezone(tz.gettz(timezone_id))
### get the last 12 full Monday to Sunday weeks
timeKey1 = (today - datetime.timedelta(days=today.weekday()))- datetime.timedelta(weeks=12)
timeKey2 = (today - datetime.timedelta(days=today.weekday()))- datetime.timedelta(days=1)
timeKey1 = datetime.datetime.strptime(''.join(str(timeKey1).rsplit(':', 1)), '%Y-%m-%d %H:%M:%S.%f%z').strftime('%Y-%m-%d')
timeKey2 = datetime.datetime.strptime(''.join(str(timeKey2).rsplit(':', 1)), '%Y-%m-%d %H:%M:%S.%f%z').strftime('%Y-%m-%d')
print(timeKey1)
print(timeKey2)
, который возвращает диапазон дат с 2018-12-03 по 2019-02-24, что здорово:
2018-12-03
2019-02-24
Итак, когдаЯ использую это для извлечения данных, которые мне нужны за этот период времени, я группирую недели:
### Convert timekey to week of year
df['week'] = df['timekey'].astype(str).apply(lambda x: dt.strptime(x, "%Y%m%d").strftime("%W"))
### group the weeks of year together
df['weekCumulative'] = df['week'].ne(df['week'].shift()).cumsum()
Затем я хочу, чтобы моя функция продолжалась, если максимальное значение в df ['weekCumulative']. Max () == 12:
###Check that 12 weeks is available
if df['weekCumulative'].max() == 12:
Но здесь не получается, потому что понедельник 2018-12-31 оказывается 53-й неделей 2018 года. В приведенной ниже таблице показано следующее:
weekCumulative = week of year grouped by weeks 1 to 12
week = week of year
startDate = date of the Monday in each week
endDate = date of the Sunday in each week
Таблица:
weekCumulative week startDate endDate
1 49 2018-12-03 2018-12-09
2 50 2018-12-10 2018-12-16
3 51 2018-12-17 2018-12-23
4 52 2018-12-24 2018-12-30
5 53 2018-12-31 2018-12-31
6 00 2019-01-01 2019-01-06
7 01 2019-01-07 2019-01-13
8 02 2019-01-14 2019-01-20
9 03 2019-01-21 2019-01-27
10 04 2019-01-28 2019-02-03
11 05 2019-02-04 2019-02-10
12 06 2019-02-11 2019-02-17
13 07 2019-02-18 2019-02-24
Теперь мы можем видеть, что df ['weekCumulative']. Max () фактически равен 13, потому что понедельник 2018-12-31, оказывается, 53-я неделя из 2018, поэтому он сгруппирован вего собственная группа, где weekCumulative = 5. Когда то, что я на самом деле хочу увидеть, это:
weekCumulative week startDate endDate
1 49 2018-12-03 2018-12-09
2 50 2018-12-10 2018-12-16
3 51 2018-12-17 2018-12-23
4 52 2018-12-24 2018-12-30
5 00 2018-12-31 2019-01-06
6 01 2019-01-07 2019-01-13
7 02 2019-01-14 2019-01-20
8 03 2019-01-21 2019-01-27
9 04 2019-01-28 2019-02-03
10 05 2019-02-04 2019-02-10
11 06 2019-02-11 2019-02-17
12 07 2019-02-18 2019-02-24
Где понедельник 2018-12-31 сгруппирован в крошечныйk 0 из 2019.
Итак, мои вопросы: как это можно сделать так, чтобы мне не приходилось извлекать данные, а затем заменять неделю 53 на 00?Было бы более эффективно обрабатывать это программно.
Буду признателен за любые предложения.