Панды: как группировать по диапазону значений


Вы можете использовать следующий синтаксис, чтобы использовать функцию 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

Предположим, у нас есть следующий DataFrame 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 в группировке

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

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