Pandas: como agrupar por intervalo de valores


Você pode usar a seguinte sintaxe para usar a função groupby() no pandas para agrupar uma coluna por intervalo de valores antes de realizar a agregação:

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

Este exemplo específico agrupará as linhas do DataFrame de acordo com o seguinte intervalo de valores na coluna chamada my_column :

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

Em seguida, ele calculará a soma dos valores em todas as colunas do DataFrame usando esses intervalos de valores como grupos.

O exemplo a seguir mostra como usar essa sintaxe na prática.

Exemplo: Como agrupar por intervalo de valores no Pandas

Vamos supor que temos o seguinte DataFrame do pandas que contém informações sobre os tamanhos de diferentes lojas de varejo e suas vendas totais:

 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

Podemos usar a seguinte sintaxe para agrupar o DataFrame com base em intervalos específicos da coluna store_size e, em seguida, calcular a soma de todas as outras colunas no DataFrame usando os intervalos como grupos:

 #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

Pelo resultado podemos ver:

  • Para linhas com valor store_size entre 0 e 25, a soma de store_size é 39 e a soma das vendas é 33 .
  • Para linhas com valor store_size entre 25 e 50, a soma de store_size é 100 e a soma das vendas é 69 .

E assim por diante.

Se desejar, você também pode calcular apenas a soma das vendas para cada faixa 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

Você também pode usar a função NumPy arange() para dividir uma variável em intervalos sem especificar manualmente cada ponto de corte:

 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

Observe que esses resultados correspondem ao exemplo anterior.

Nota : Você pode encontrar a documentação completa para a função NumPy arange() aqui .

Recursos adicionais

Os tutoriais a seguir explicam como realizar outras tarefas comuns em pandas:

Pandas: como contar valores únicos usando groupby
Pandas: Como calcular a média e a norma de uma coluna em groupby
Pandas: Como usar as_index em groupby

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *