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