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
Другие вопросы по тегам