1
resposta

Como faço para somar as faixas de valores criadas pelo pd.cut(dados, classes)

Depois que criei as faixas de valores, eu gostaria de fazer uma estatística descritiva das minhas faixas, tipo soma, média, desvio padrão. Tenho esse pedaço de código:

passo = 50000
minimo = math.ceil(describe['regressao']['min'])
maximo = math.ceil(describe['regressao']['max'])

agrupar = [i for i in range(minimo,maximo,passo)]

faixa = pd.cut(dataset.regressao, agrupar, include_lowest=True)

Que obtenho a saída:

0        (119821.0, 169821.0]
1        (119821.0, 169821.0]
2        (119821.0, 169821.0]
3        (119821.0, 169821.0]
4        (119821.0, 169821.0]
              ...
20487    (169821.0, 219821.0]
20488    (169821.0, 219821.0]
20489    (219821.0, 269821.0]
20490    (219821.0, 269821.0]
20491    (219821.0, 269821.0]
Name: regressao, Length: 20492, dtype: category
Categories (24, interval[float64]): [(19820.999, 69821.0] < (69821.0, 119821.0] < (119821.0, 169821.0] < (169821.0, 219821.0] ... (1019821.0, 1069821.0] < (1069821.0, 1119821.0] < (1119821.0, 1169821.0] < (1169821.0, 1219821.0]]

Se eu usar o comando:

pd.value_counts(faixa)

Tenho como saída:

(69821.0, 119821.0]       6081
(119821.0, 169821.0]      5035
(169821.0, 219821.0]      2995
(19820.999, 69821.0]      2268
(219821.0, 269821.0]      1854
(269821.0, 319821.0]       945
(319821.0, 369821.0]       579
(369821.0, 419821.0]       324
(419821.0, 469821.0]       156
(469821.0, 519821.0]       115
(519821.0, 569821.0]        61
(569821.0, 619821.0]        29
(619821.0, 669821.0]        22
(669821.0, 719821.0]        16
(719821.0, 769821.0]         3
(919821.0, 969821.0]         2
(1069821.0, 1119821.0]       2
(1169821.0, 1219821.0]       2
(1119821.0, 1169821.0]       1
(769821.0, 819821.0]         0
(819821.0, 869821.0]         0
(869821.0, 919821.0]         0
(969821.0, 1019821.0]        0
(1019821.0, 1069821.0]       0
Name: regressao, dtype: int64

Porem como faço para obter a soma desses 6081 primeiros elementos por exemplo?

1 resposta

Olá Rene,

Para facilitar o agrupamento dos itens antes de fazer a soma ou qualquer outro cálculo você pode atribuir o valor das faixas obtidas para o seu DataFrame:

dataset['faixa'] = faixa

Agora você pode utilizar o groupby nessa nova coluna e fazer os cálculos necessários:

dataset.groupby('faixa')['regressao'].sum()
dataset.groupby('faixa')['regressao'].describe()

Obs.: Talvez o seu agrupamento esteja faltando a última classe porque no código range(minimo,maximo,passo) o maximo não é incluído, recomendo verificar nas classes se isso realmente está acontecendo e, caso necessário, atualizar para range(minimo, maximo + passo, passo).

Espero ter ajudado, qualquer dúvida é só falar!