Як розрахувати зсув на групу в 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

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *