Une dernière question pour les pandas débutants pour la journée: comment générer une table pour une seule série?
Par exemple:
my_series = pandas.Series([1,2,2,3,3,3])
pandas.magical_frequency_function( my_series )
>> {
1 : 1,
2 : 2,
3 : 3
}
Beaucoup de recherches sur Google m'ont conduit à Series.describe () et pandas.crosstabs, mais ni l'un ni l'autre ne fait exactement ce dont j'ai besoin: une variable, compte par catégories. Oh, et ce serait bien si cela fonctionnait pour différents types de données: chaînes, entiers, etc.
.value_counts().sort_index(1)
, pour éviter que la première colonne ne devienne légèrement enAttributeError: 'DataFrame' object has no attribute 'value_counts'
pd.value_counts(df.values.ravel())
qui renvoie une série dont les attributsindex
etvalues
contiennent les éléments uniques et leurs nombres respectivement.Vous pouvez utiliser la compréhension de liste sur une trame de données pour compter les fréquences des colonnes en tant que telles
Panne:
la source
La réponse fournie par @DSM est simple et directe, mais j'ai pensé ajouter ma propre contribution à cette question. Si vous regardez le code de pandas.value_counts , vous verrez qu'il se passe beaucoup de choses.
Si vous avez besoin de calculer la fréquence de nombreuses séries, cela peut prendre un certain temps. Une implémentation plus rapide serait d'utiliser numpy.unique avec
return_counts = True
Voici un exemple:
Notez ici que l'article retourné est un pandas.
En comparaison,
numpy.unique
renvoie un tuple avec deux éléments, les valeurs uniques et les décomptes.Vous pouvez ensuite les combiner dans un dictionnaire:
Et puis dans un
pandas.Series
la source
pour la distribution de fréquence d'une variable avec des valeurs excessives, vous pouvez réduire les valeurs dans les classes,
Ici, j'ai des valeurs excessives pour la
employrate
variable, et il n'y a aucune signification de sa distribution de fréquence avec directvalues_count(normalize=True)
distribution de fréquence
values_count(normalize=True)
sans classification, la longueur du résultat ici est de 139 (semble dénuée de sens en tant que distribution de fréquence):en mettant la classification, nous mettons toutes les valeurs avec une certaine plage ie.
après classification, nous avons une distribution de fréquence claire. ici on voit facilement que
37.64%
des pays ont un taux d'emploi entre51-60%
et11.79%
des pays ont un taux d'emploi entre71-80%
la source