Первоначальная постановка задачи
Учитывая отметку времени '2020-03-24 10:00' (вторник), я хотел бы получить начало следующей недели (понедельник 00:00), используя недельный DateOffset.
Я намерен понять, как работает DateOffset.
Вот мои попытки, пока что все терпят неудачу.
# ts being timestamp for Tuesday the 24th
ts = pd.Timestamp('2020-03-24 10:00')
# I am looking for the offset that will give me Monday the 30th 00:00
# Attempt 1 / by use of to_offset()
off1 = pd.tseries.frequencies.to_offset('1W')
ts1 = ts + off1
# ts1 is set to next Sunday the 29th 00:00, why this specific date?
# Begining of week is Monday the 30th 00:00
ts1
>>> Out: Timestamp('2020-03-29 00:00:00')
# Attempt 2 / by use of DateOffset(weeks=1)
off2 = pd.tseries.offsets.DateOffset(weeks=1)
ts2 = ts + off2
# ts2 is now Tuesday the 31st 00:00
# It is not what I am looking for, but it makes sense.
# This offset is shifting current date to 7 days later, ok.
ts2
>>> Out: Timestamp('2020-03-31 00:00:00')
# Attempt 3 / by use of DateOffset(weekday=1)
off3 = pd.tseries.offsets.DateOffset(weekday=1)
ts3 = ts + off3
# This time, I cannot figure any reason why the timestamp is
# simply not modified.
ts3
>>> Out: Timestamp('2020-03-24 10:00:00')
Пожалуйста, есть кто-нибудь объяснение результатов ts1 & TS3. Какие логики c следуют за вычислениями, которые им удалось получить?
И, наконец, кто-нибудь знает, как «заменить» значение метки времени на начало следующей недели? (Я хотел бы получить этот результат с помощью ts3 и надеяться получить тот же результат с ts1, но в настоящее время это сбой).
Завершено постановка задачи
Первый ответ приведен ниже. Support использование привязанного DateOffset, который действительно связывает начало следующей недели с моими ожиданиями: привязка к понедельнику.
Но теперь, ища согласованность, если я использую это же привязанное смещение для создания PeriodIndex, недели появляются на якорь во вторник?!
# ts being timestamp for Tuesday the 24th
ts = pd.Timestamp('2020-03-24 10:00')
ts_end=pd.Timestamp('2020-04-16 10:00')
# Offset
off1 = pd.tseries.frequencies.to_offset('W-MON')
# PeriodIndex
pi = pd.period_range(start=ts_start, end=ts_end, freq=off1)
# Checking anchoring day of created PeriodIndex:
pi[1].start_time
>>> Out: Timestamp('2020-03-31 00:00:00')
Что это за тайна?