Как использовать групповую неделю Pandas, когда номер недели охватывает более одного года - PullRequest
0 голосов
/ 06 января 2019

Мне нужно группировать по неделям, однако неделя, подобная этой (первая неделя года), охватывает два года, 2018 и 2019 годы.

Обычно я делал бы следующее:

df.groupby([df.DATE.dt.year,df.DATE.dt.week]).sum()

, что приводит к единственной неделе, характеризуемой как две отдельные недели в результате. Я уверен, что могу использовать грубую силу с заявлениями IF, однако мне интересно, есть ли более чистый способ группировки по неделям во время переходного периода в этом году.

Ответы [ 2 ]

0 голосов
/ 06 января 2019

Вы можете преобразовать даты в объекты периода Панды, а затем сгруппировать их.

df = pd.DataFrame(
    {'Date': pd.DatetimeIndex(start='2018-12-24', end='2019-01-05', freq='d'),
     'Data': [1] * 8 + [2] * 5})
>>> df
         Date  Data
0  2018-12-24     1
1  2018-12-25     1
2  2018-12-26     1
3  2018-12-27     1
4  2018-12-28     1
5  2018-12-29     1
6  2018-12-30     1
7  2018-12-31     1
8  2019-01-01     2
9  2019-01-02     2
10 2019-01-03     2
11 2019-01-04     2
12 2019-01-05     2

>>> (df
     .assign(period=pd.PeriodIndex(df['Date'], freq='W-Sun'))  # Weekly periods ending Sundays.
     .groupby('period')['Data'].mean())
period
2018-12-24/2018-12-30    1.000000
2018-12-31/2019-01-06    1.833333  # (1 * 1 + 2 * 5) / 6 = 1.833 
Freq: W-SUN, Name: Data, dtype: float64

Обратите внимание, что в приведенном выше примере в последнем периоде осталось только шесть дней.

0 голосов
/ 06 января 2019

Или просто с помощью resample

df.set_index('Date').resample('W-SUN').Data.mean()
Date
2018-12-30    1.000000
2019-01-06    1.833333
Freq: W-SUN, Name: Data, dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...