Як розрахувати зсув на групу в pandas
Ви можете використовувати наступні методи для обчислення групових зміщених значень у pandas DataFrame:
Спосіб 1: обчисліть зсув за групою
df[' lagged_values '] = df. groupby ([' group '])[' values ']. shift ( 1 )
Спосіб 2: обчисліть компенсацію за кількома групами
df[' lagged_values '] = df. groupby ([' group1 ', ' group2 '])[' values ']. shift ( 1 )
Зауважте, що значення функції shift() вказує на кількість значень, для яких обчислюється зсув.
Наступні приклади показують, як використовувати кожен метод на практиці.
Приклад 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 , оскільки це попереднє значення в стовпці продажів для магазину A.
І так далі.
Приклад 2: обчислення компенсації за кількома групами
Припустімо, що у нас є такий фрейм даних 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