Pandas group into groups with a determining range

Asked

Viewed 29 times

0

beauty? I’m trying to group values of a dataframe called

df_agenda

by age, wanted to group the values in this way in the age: of (0-20),(20-40), (40-60) and so up to the maximum value of the list of age.

    status_consulta confirm_consulta  idade       sexo  contagem
171        AGENDADA        DESMARCOU      5   FEMININO         1
140        AGENDADA  FALTA_CONFIRMAR      6  MASCULINO         1
47       FINALIZADA       CONFIRMADO      7  MASCULINO         3
131        AGENDADA  FALTA_CONFIRMAR      7   FEMININO         1
217      FINALIZADA       CONFIRMADO      7   FEMININO         1
216      FINALIZADA       CONFIRMADO      8  MASCULINO         1
130        AGENDADA  FALTA_CONFIRMAR      9  MASCULINO         1
34       FINALIZADA       CONFIRMADO      9  MASCULINO         4
139        AGENDADA  FALTA_CONFIRMAR     10   FEMININO         1
77       FINALIZADA       CONFIRMADO     10  MASCULINO         2
129        AGENDADA  FALTA_CONFIRMAR     10  MASCULINO         1
215      FINALIZADA       CONFIRMADO     11  MASCULINO         1
28       FINALIZADA       CONFIRMADO     12  MASCULINO         4
128        AGENDADA  FALTA_CONFIRMAR     12  MASCULINO         1
123        AGENDADA  FALTA_CONFIRMAR     14  MASCULINO         1
193      FINALIZADA       CONFIRMADO     14  MASCULINO         1

tried that way:

df_agenda = df_agenda.sort_values(by='idade')
df_agenda = df_agenda.groupby(cut(df_agenda['idade'], np.arange(0, max(n), 20)))
print(df_agenda.head())

but my return is:

TypeError: Cannot cast array data from dtype('int64') to dtype('int32') according to the rule 'safe'

Anyone? Thank you

1 answer

1

First create a column with the age range (can be using the pd.cut as you tried), then group through it:

df = ... # seu DataFrame aqui
faixas_etarias = np.arange(0, df['idade'].max()+1, 20)
df['faixa_etaria'] = pd.cut(df['idade'], faixas_etarias)

# A partir daqui, use `df.groupby` para agrupar pela coluna 'faixa_etaria'
df_agrupado = df.groupby('faixa_etaria')

Note that df_agrupado is an object of the type DataFrameGroupBy, about which you will normally want to do an operation that will be applied to each group. For example, df_agrupado['idade'].mean() show the average age within each age group.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.