Как рассчитать смещение для каждой группы в pandas


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

Способ 1: вычислить смещение по группе

 df[' lagged_values '] = df. groupby ([' group '])[' values ']. shift ( 1 )

Способ 2: рассчитать смещение по нескольким группам

 df[' lagged_values '] = df. groupby ([' group1 ', ' group2 '])[' values ']. shift ( 1 )

Обратите внимание, что значение функции сдвиг() указывает количество значений, для которых рассчитывается сдвиг.

Следующие примеры показывают, как использовать каждый метод на практике.

Пример 1. Вычисление смещения по группе

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

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' store ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
                   ' sales ': [18, 10, 14, 13, 19, 24, 25, 29]})
#view DataFrame
print (df)

  blind sales
0 to 18
1 to 10
2 to 14
3 to 13
4 B 19
5 B 24
6 B 25
7 B 29

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

 #add column that displays lag of sales column by store
df[' lagged_sales '] = df. groupby ([' store '])[' sales ']. shift ( 1 )

#view updated DataFrame
print (df)

  store sales lagged_sales
0 to 18 NaN
1 to 10 18.0
2 A 14 10.0
3 A 13 14.0
4 B 19 NaN
5 B 24 19.0
6 B 25 24.0
7 B 29 25.0

Вот как интерпретировать результат:

  • Первое значение в столбце смещения — NaN , поскольку в столбце продаж для магазина A нет предшествующего значения.
  • Второе значение в столбце «Смещение» равно 18 , поскольку это предыдущее значение в столбце «Продажи» для магазина А.

И так далее.

Пример 2. Вычисление смещения по нескольким группам

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

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' store ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
                   ' employee ':['O', 'O', 'R', 'R', 'O', 'O', 'R', 'R'],
                   ' sales ': [18, 10, 14, 13, 19, 24, 25, 29]})
#view DataFrame
print (df)

  store employee sales
0 AO 18
1 AO 10
2 AR 14
3 AR 13
4 BO 19
5 BO 24
6 BR 25
7 BR 29

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

 #add column that displays lag of sales column by store and employee
df[' lagged_sales '] = df. groupby ([' store ',' employee '])[' sales ']. shift ( 1 )

#view updated DataFrame
print (df)

  store employee sales lagged_sales
0 AO 18 NaN
1 AO 10 18.0
2 AR 14 NaN
3 AR 13 14.0
4 BO 19 NaN
5 BO 24 19.0
6 BR 25 NaN
7 BR 29 25.0

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

Примечание . В этом примере мы сгруппировали по двум столбцам, но вы можете сгруппировать по любому количеству столбцов, включив в функцию groupby() столько имен переменных, сколько захотите.

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

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

Как удалить столбцы в Pandas
Как исключить столбцы в Pandas
Как применить функцию к выбранным столбцам в Pandas
Как изменить порядок столбцов в Pandas DataFrame

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

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