Как сгруппировать по неделям в Pandas DataFrame(с примером)


Вы можете использовать следующий базовый синтаксис для группировки строк по неделям в pandas DataFrame:

#convert date column to datetime and subtract one week
df['date'] = pd.to_datetime(df['date']) - pd.to_timedelta (7, unit='d')

#calculate sum of values, grouped by week
df.groupby([pd.Grouper(key='date', freq='W')])['values']. sum ()

Эта конкретная формула группирует строки по неделям в столбце даты и вычисляет сумму значений для столбца значений в DataFrame.

В следующем примере показано, как использовать этот синтаксис на практике.

Пример: как сгруппировать по неделям в Pandas

Предположим, у нас есть следующий кадр данных pandas, который показывает продажи, сделанные какой-либо компанией в разные даты:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'date ': pd.date_range (start='1/5/2022', freq='D', periods=15),
 'sales': [6, 8, 9, 5, 4, 8, 8, 3, 5, 9, 8, 3, 4, 7, 7]})

#view DataFrame
print(df)

 date sales
0 2022-01-05 6
1 2022-01-06 8
2 2022-01-07 9
3 2022-01-08 5
4 2022-01-09 4
5 2022-01-10 8
6 2022-01-11 8
7 2022-01-12 3
8 2022-01-13 5
9 2022-01-14 9
10 2022-01-15 8
11 2022-01-16 3
12 2022-01-17 4
13 2022-01-18 7
14 2022-01-19 7

Связанный: Как создать диапазон дат в Pandas

Мы можем использовать следующий синтаксис для вычисления суммы продаж, сгруппированных по неделям:

#convert date column to datetime and subtract one week
df['date'] = pd.to_datetime(df['date']) - pd.to_timedelta (7, unit='d')

#calculate sum of values, grouped by week
df.groupby([pd.Grouper(key='date', freq='W')])['sales']. sum ()

date
2022-01-02 32
2022-01-09 44
2022-01-16 18
Freq: W-SUN, Name: sales, dtype: int64

Вот как интерпретировать вывод:

  • Всего за неделю, начавшуюся после 01.02.2022, было совершено 32 продажи.
  • Всего за неделю, начавшуюся после 09.01.2022, было совершено 44 продажи.
  • Всего за неделю, начавшуюся после 16.01.2022, было совершено 18 продаж.

Стоит отметить, что по умолчанию pandas предполагает, что неделя начинается на следующий день после воскресенья ( W-SUN ).

Однако согласно документации вы можете изменить это значение для Freq .

Например, вы можете указать Freq=W-MON , если хотите, чтобы каждая неделя вместо этого начиналась на следующий день после понедельника (т. е. вторник).

Мы можем использовать аналогичный синтаксис для вычисления максимальных значений продаж, сгруппированных по неделям:

#convert date column to datetime and subtract one week
df['date'] = pd.to_datetime(df['date']) - pd.to_timedelta (7, unit='d')

#calculate max of values, grouped by week
df.groupby([pd.Grouper(key='date', freq='W')])['sales']. max ()

date
2022-01-02 9
2022-01-09 9
2022-01-16 7
Freq: W-SUN, Name: sales, dtype: int64

Вот как интерпретировать вывод:

  • Максимальный объем продаж в отдельный день в течение недели, начинающейся со дня после 02.01.2022, составил 9 .
  • Максимальный объем продаж в отдельный день недели, начинающейся после 09.01.2022, составил 9 .
  • Максимальный объем продаж в отдельный день в течение недели, начинающейся после 16 января 2022 г., составлял 7 .

Примечание.Полную документацию по операции groupby в pandas можно найти здесь .

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в pandas:

Как сгруппировать по месяцам в Pandas DataFrame
Pandas: как использовать Groupby и Count с условием