Python: определение начального дня в определении недели в isocalendar, strftime или в другом месте.
Мне нужно разбить pandas.tslib.Timestamp на несколько недель. Итак, учитывая, что a
это pd.DataFrame я использовал
tmp = pd.to_datetime(a)
tmp = tmp.apply(lambda x: str(str(x.isocalendar()[1]))
Проблема в том, что моя неделя начинается не в понедельник или воскресенье, а во вторник (она может начаться даже в среду - это определяется пользователем). Можно ли изменить определение начальной недели и по-прежнему использовать общие функции Python?
Или есть другой обходной путь?
1 ответ
Решение
Используйте смещение; Вы можете повторно привести значение дня недели к любому другому в диапазоне, а затем вычесть из номера недели:
user_sow = 3 # wednesday (monday is 1, sunday is 7)
tmp.apply(lambda x: x.isocalendar()[1] - (x.isoweekday() < user_sow))
Это вычитает 1 (логическое True
равно 1 в целочисленном контексте) от номера недели, если день недели предшествует началу недели, настроенной пользователем.
Демо-версия:
>>> dt = date.today() # today's a Wednesday
>>> dt
datetime.date(2015, 4, 28)
>>> dt.isocalendar()[1]
18
>>> dt.isocalendar()[1] - (dt.isoweekday() < 2) # week starts on Tuesday
18
>>> dt.isocalendar()[1] - (dt.isoweekday() < 3) # week starts on Wednesday
17