python pandas pivot_table de fréquence de comptage dans une colonne
Je suis encore nouveau pour Python pandas pivot_table et voudrais poser une façon de compter les fréquences de valeurs dans une colonne, qui est également liée à une autre colonne d'identité. Le DataFrame ressemble à la suivante.
import pandas as pd
df = pd.DataFrame({'Account_number':[1,1,2,2,2,3,3],
'Product':['A', 'A', 'A', 'B', 'B','A', 'B']
})
Pour la sortie, je voudrais obtenir quelque chose comme ce qui suit:
Product
A B
Account_number
1 2 0
2 1 2
3 1 1
Jusqu'à présent, j'ai essayé ce code:
df.pivot_table(rows = 'Account_number', cols= 'Product', aggfunc='count')
Ce code me donne les deux mêmes choses. Qu'est-ce que les problèmes avec le code ci-dessus? Une partie de la raison pour laquelle je pose cette question, c'est que ce DataFrame est juste un exemple. Les données réelles que je suis en train de travailler sur a des dizaines de milliers de account_numbers. Merci pour votre aide à l'avance!
aggfunc=len
Toutes les réponses sur cette page ne fonctionne pas pour les DataFrames avec plus de 3 colonnes. Le idiomatiques solution est d'utiliser
aggfunc='size'
. Voir ma réponse ci-dessous pour plus de détails
OriginalL'auteur midtownguru | 2014-03-14
Vous devez vous connecter pour publier un commentaire.
Vous devez spécifier le
aggfunc
commelen
:Il ressemble à compter, est à compter les occurrences de chaque colonne (
Account_number
etProduct
), il n'est pas clair pour moi si c'est un bug...df.pivot_table(rows='Account_number', cols='Product', aggfunc=sum, fill_value=0)
Je pense que ça pourrait être un bug (vous ne vous attendez pas les colonnes à inclure dans l'agrégation, en fait, ils n'ont pas de sens avec la somme!)
OriginalL'auteur Andy Hayden
Dans la nouvelle version de Pandas, une légère modification est nécessaire. J'ai dû passer un peu de temps à essayer de comprendre si voulais juste ajouter qu'ici, de sorte que quelqu'un peut utiliser directement cette.
OriginalL'auteur PagMax
Solution: Utilisation
aggfunc='size'
À l'aide de
aggfunc=len
ouaggfunc='count'
comme toutes les autres réponses sur cette page ne fonctionne pas pour les DataFrames avec plus de trois colonnes. Par défaut, les pandas vont appliquer ceaggfunc
pour toutes les colonnes ne trouve pas dansindex
oucolumns
paramètres.Par exemple, si nous avions plus de deux colonnes dans notre DataFrame définie comme ceci:
De sortie:
Si vous appliquez les solutions actuelles pour ce DataFrame, vous obtenez le résultat suivant:
De sortie:
Solution
Au lieu de cela, utiliser
aggfunc='size'
. Depuissize
renvoie toujours la même valeur pour chaque colonne, les pandas ne pas l'appeler sur chaque colonne et seulement une fois.De sortie:
OriginalL'auteur Ted Petrou
Vous pouvez utiliser
count
df.pivot_table(index='Account_number', columns='Product', aggfunc='count')
OriginalL'auteur Rui Wang