Pandas: как использовать groupby с diff


Вы можете использовать следующий базовый синтаксис для использования функции groupby() с функцией diff() в pandas:

 df = df. sort_values (by=[' group_var1 ', ' group_var2 '])

df[' diff '] = df. groupby ([' group_var1 '])[' values_var ']. diff (). fillna ( 0 )

В этом конкретном примере строки DataFrame сортируются по двум конкретным переменным, затем группируются по значению group_var1 и вычисляется разница между строками в столбце значений_var .

Обратите внимание, что fillna(0) сообщает pandas вставлять ноль всякий раз, когда значение групповой переменной изменяется между последовательными строками в DataFrame.

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

Пример: как использовать groupby с diff в Pandas

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

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' store ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
                   ' date ': pd. to_datetime (['2022-01-01', '2022-01-02',
                                           '2022-01-03', '2022-01-04',
                                           '2022-01-01', '2022-01-02',
                                           '2022-01-03', '2022-01-04']),
                   ' sales ': [12, 15, 24, 24, 14, 19, 12, 38]})

#view DataFrame
print (df)

  blind date sales
0 A 2022-01-01 12
1 A 2022-01-02 15
2 A 2022-01-03 24
3 A 2022-01-04 24
4 B 2022-01-01 14
5 B 2022-01-02 19
6 B 2022-01-03 12
7 B 2022-01-04 38

Теперь предположим, что мы хотим создать новый столбец с именем sales_diff , который содержит разницу в значениях продаж между последовательными датами, сгруппированными по магазинам.

Для этого мы можем использовать следующий синтаксис:

 #sort DataFrame by store and date
df = df. sort_values (by=[' store ', ' date '])

#create new column that contains difference between sales grouped by store
df[' sales_diff '] = df. groupby ([' store '])[' sales ']. diff (). fillna ( 0 )

#view update DataFrame
print (df)

  store date sales sales_diff
0 A 2022-01-01 12 0.0
1 A 2022-01-02 15 3.0
2 A 2022-01-03 24 9.0
3 A 2022-01-04 24 0.0
4 B 2022-01-01 14 0.0
5 B 2022-01-02 19 5.0
6 B 2022-01-03 12 -7.0
7 B 2022-01-04 38 26.0

Новый столбец sales_diff содержит разницу в значениях продаж между последовательными датами, сгруппированную по магазинам.

Например, мы можем увидеть:

  • Разница в продажах магазина А между 01.01.2022 и 01.02.2022 равна 3 .
  • Разница в продажах магазина А между 01.02.2022 и 01.03.2022 равна 9 .
  • Разница в продажах магазина А между 03.01.2022 и 04.01.2022 равна 0 .

И так далее.

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

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

Как выполнить сумму GroupBy в Pandas
Как использовать Groupby и Plot в Pandas
Как посчитать уникальные значения с помощью GroupBy в Pandas

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *