Как сгруппировать по неделям в 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 с условием

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.