Pandas: як групувати за діапазоном значень


Ви можете використовувати такий синтаксис, щоб використовувати функцію groupby() у pandas для групування стовпця за діапазоном значень перед виконанням агрегації:

 df. groupby (pd. cut (df[' my_column '], [0, 25, 50, 75, 100])). sum ()

Цей конкретний приклад згрупує рядки DataFrame відповідно до наступного діапазону значень у стовпці під назвою my_column :

  • (0,25]
  • (25, 50]
  • (50, 75]
  • (75, 100]

Потім він обчислить суму значень у всіх стовпцях DataFrame, використовуючи ці діапазони значень як групи.

У наступному прикладі показано, як використовувати цей синтаксис на практиці.

Приклад: як згрупувати за діапазоном значень у Pandas

Припустімо, що у нас є такий фрейм даних pandas, який містить інформацію про розміри різних роздрібних магазинів і їхній загальний обсяг продажів:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' store_size ': [14, 25, 26, 29, 45, 58, 67, 81, 90, 98],
                   ' sales ': [15, 18, 24, 25, 20, 35, 34, 49, 44, 49]})

#view DataFrame
print (df)

   store_size sales
0 14 15
1 25 18
2 26 24
3 29 25
4 45 20
5 58 35
6 67 34
7 81 49
8 90 44
9 98 49

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

 #group by ranges of store_size and calculate sum of all columns
df. groupby (pd. cut (df[' store_size '], [0, 25, 50, 75, 100])). sum ()

	 store_size sales
store_size		
(0.25] 39 33
(25, 50] 100 69
(50, 75] 125 69
(75, 100] 269 142

З результату ми бачимо:

  • Для рядків зі значенням store_size від 0 до 25 сума store_size дорівнює 39 , а сума продажів – 33 .
  • Для рядків зі значенням store_size від 25 до 50 сума store_size дорівнює 100 , а сума продажів – 69 .

І так далі.

Якщо ви хочете, ви також можете обчислити лише суму продажів для кожного діапазону store_size :

 #group by ranges of store_size and calculate sum of sales
df. groupby (pd. cut (df[' store_size '], [0, 25, 50, 75, 100]))[' sales ']. sum ()

store_size
(0.25] 33
(25, 50] 69
(50, 75] 69
(75, 100] 142
Name: sales, dtype: int64

Ви також можете використовувати функцію NumPy arange() , щоб розбити змінну на діапазони, не вказуючи вручну кожну точку відрізу:

 import numpy as np

#group by ranges of store_size and calculate sum of sales
df. groupby (pd. cut (df[' store_size '], np. arange (0, 101, 25)))[' sales ']. sum ()

store_size
(0.25] 33
(25, 50] 69
(50, 75] 69
(75, 100] 142
Name: sales, dtype: int64

Зверніть увагу, що ці результати відповідають попередньому прикладу.

Примітка . Ви можете знайти повну документацію для функції NumPy arange() тут .

Додаткові ресурси

У наступних посібниках пояснюється, як виконувати інші типові завдання в pandas:

Pandas: як підрахувати унікальні значення за допомогою groupby
Pandas: Як обчислити середнє значення та норму стовпця в groupby
Pandas: Як використовувати as_index у groupby

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

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