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