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()
3 Réponses :
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 ()
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)
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.