Получение отметки времени конца периода в пандах при использовании Grouper

У меня есть фрейм данных, в котором один столбец - это временные метки. Пример:

                week                     Energy        Value
1152 2018-01-09 00:00:00                  None        0.000000   
1153 2018-01-09 00:10:00                  None        0.000000   
1154 2018-01-09 00:20:00                  None      104.000000   
1155 2018-01-09 00:30:00                  None      104.049080   
1156 2018-01-09 00:40:00                  None        0.000000   
1157 2018-01-09 00:50:00                  None        0.000000   
1158 2018-01-09 01:00:00                  None       46.428571   
1159 2018-01-09 01:10:00                  None        0.000000   
1160 2018-01-09 01:20:00                  None        0.000000   
1161 2018-01-09 01:30:00                  None      113.846154   
1162 2018-01-09 01:40:00                  None      126.108374   
1163 2018-01-09 01:50:00                  None        0.000000   
1164 2018-01-09 02:00:00                  None       35.398230   
1165 2018-01-09 02:10:00                  None        0.000000   
1166 2018-01-09 02:20:00                  None        0.000000   
1167 2018-01-09 02:30:00                  None       71.937984   
1168 2018-01-09 02:40:00                  None        0.000000   
1169 2018-01-09 02:50:00                  None        0.000000   
1170 2018-01-09 03:00:00                  None       30.877193   
1171 2018-01-09 03:10:00                  None        0.000000 

Теперь я группирую его по этому столбцу, используя pd.Grouper, но он возвращает время, соответствующее конец периода группировки. Это мой запрос

df = df.groupby([pd.Grouper(key=timestamp, freq='W'), 'ID'])

Возврат:

week                   Count      
2018-01-07               984  
2018-01-14               566  
2018-01-21               725  
2018-01-28               815  
2018-02-04               774  
2018-02-11               648  
2018-02-18               807  
2018-02-25               804  
2018-03-04               967  
2018-03-11               953

Это уже сильно сбивает с толку, потому что использование freq='W' возвращает обычные недели с понедельника по понедельник, т. Е. Недели окончание в воскресенье, а не неделю начало в воскресенье, как я предполагал. Конечно, документация не имеет смысла, потому что все, что он говорит, это «еженедельная частота (воскресенье)».

Мой основной вопрос: как я могу сделать так, чтобы столбец отметки времени (постгруппировка) возвращал отметку времени, соответствующую Начало периода? Это необходимо, потому что мне нужно объединить этот фрейм данных с другим фреймом данных, в котором периоды генерируются с помощью pd.date_range(start, end, freq='W-MON'). Я не могу объединить его в метку времени окончания, поскольку последняя не возвращает конец недели, скорее, она возвращает то, что есть end, что может быть серединой недели.

Кстати, кто-нибудь знает, почему поведение freq отличается для pd.Grouper и pd.date_range? Последний возвращает неделю с понедельника по понедельник, но с freq='W-MON', тогда как первый использует для того же freq='W'. Или я что-то упускаю?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
428
1

Ответы 1

Вы просто хотите использовать аргумент label для pandas.Grouper, который указывает ему использовать левую границу для маркировки, когда вы предоставляете аргумент freq. Вот как меняется неделя маркировки с указанным вами аргументом df и без него.

import pandas as pd

df.groupby([pd.Grouper(key='week', freq='W-MON', label='left')]).Value.max()
#week
#2018-01-08    126.108374
#Freq: W-MON, Name: Value, dtype: float64

# Without label, it sets the label as the 
df.groupby([pd.Grouper(key='week', freq='W-MON')]).Value.max()
#week
#2018-01-15    126.108374
#Freq: W-MON, Name: Value, dtype: float64

Другие вопросы по теме