0
votes

Comment calculer les valeurs moyennes de chaque âge selon les valeurs d'une autre colonne dans Pandas

Je cherche un moyen d'obtenir l'état matrimonial moyen de chaque âge:

Par exemple, pour les personnes de 34 ans, le statut martial médian est Célibataire, pour 35 c'est aussi Single et ainsi de suite.

Je regroupe le dataframe

years_old  status_mediam
  34         single
   .            .
  36          single
  37          married 
   38         married ....
   45         divorced and so on.

mais il émet des erreurs comme:

    Edad    Estado_Civil
0   38  Soltero
1   26  Casado
2   26  Soltero
4   38  Soltero
5   24  Soltero
6   28  Soltero
7   30  Casado
8   32  Soltero
9   19  Soltero
10  28  Soltero
11  45  Casado
12  27  Soltero
13  41  Casado
14  45  Casado
15  38  Soltero

Fondamentalement, ceci fait partie de mon DataFrame:

DataError: No numeric types to aggregate

J'ai besoin d'obtenir une liste d'un statut médian pour chaque âge comme ceci: p>

df_edad_estado_civil.groupby(['Estado_Civil', 'Edad'], as_index=False).mean() 


0 commentaires

3 Réponses :


0
votes

convertir la colonne Estado_Civil en un type numérique avec 0 pour marié et 1 pour célibataire avec quelque chose du genre `df.Estado_Civil = df.Estado_Civil.apply (lambda x: 1 * (x = = 'unique')). Ensuite, effectuez le groupby.

Il serait également utile de sélectionner une colonne particulière avant d'appliquer le .mean () , par exemple df.groupby (['Estado_Civil', 'Edad'], as_index = False) ['Estado_Civil']. mean ()


0 commentaires

0
votes

Je pense que ces données sont linéaires, car les gens se marieront en vieillissant. Ainsi, il peut être représenté par une équation linéaire. Fondamentalement, il peut être résolu par un modèle de régression linéaire de l'apprentissage automatique. Je pense que vous créez une sorte de modèle d'apprentissage automatique. Quoi qu'il en soit, Ceci est un exemple de code sur lequel je calcule chaque moyenne de l'état matrimonial.

    Estado_Civil     Edad
0             38  Soltero
1             26   Casado
2             26  Soltero
3             38  Soltero
4             24  Soltero
5             28  Soltero
6             30   Casado
7             19  Soltero
8             28  Soltero
9             45   Casado
10            27  Soltero
11            41   Casado
12            45   Casado
13            38  Soltero
Edad
Casado     37.400000
Soltero    29.555556

Le résultat:

data = [[38, 'Soltero'],
        [26, 'Casado'],
        [26, 'Soltero'],
        [38, 'Soltero'],
        [24, 'Soltero'],
        [28, 'Soltero'],
        [30, 'Casado'],
        [19, 'Soltero'], 
        [28, 'Soltero'],
        [45, 'Casado'],
        [27, 'Soltero'],
        [41, 'Casado'],
        [45, 'Casado'],
        [38, 'Soltero']]

df_edad_estado_civil = pd.DataFrame(data, columns=list(['Estado_Civil', 'Edad']))
result = df_edad_estado_civil['Estado_Civil'].groupby(df_edad_estado_civil['Edad']).mean() 
print (df_edad_estado_civil)
print (result)


0 commentaires

0
votes

Il semble que vous recherchez le mode statistique, qui est la valeur la plus fréquente:

df_edad_estado_civil.groupby('Edad')['Estado_Civil'].agg(pd.Series.mode)

Voir cette réponse pour plus de détails.


0 commentaires