J'ai un dataframe pandas au format suivant:
df = pd.DataFrame([[1.1, 1.1, 1.1, 2.6, 2.5, 3.4,2.6,2.6,3.4,3.4,2.6,1.1,1.1,3.3], list('AAABBBBABCBDDD'), [1.1, 1.7, 2.5, 2.6, 3.3, 3.8,4.0,4.2,4.3,4.5,4.6,4.7,4.7,4.8], ['x/y/z','x/y','x/y/z/n','x/u','x','x/u/v','x/y/z','x','x/u/v/b','-','x/y','x/y/z','x','x/u/v/w'],['1','3','3','2','4','2','5','3','6','3','5','1','1','1']]).T
df.columns = ['col1','col2','col3','col4','col5']
df:
col1 col2 col3 col4 col5
0 1.1 A 1.1 x/y/z 1
1 1.1 A 1.7 x/y 3
2 1.1 A 2.5 x/y/z/n 3
3 2.6 B 2.6 x/u 2
4 2.5 B 3.3 x 4
5 3.4 B 3.8 x/u/v 2
6 2.6 B 4 x/y/z 5
7 2.6 A 4.2 x 3
8 3.4 B 4.3 x/u/v/b 6
9 3.4 C 4.5 - 3
10 2.6 B 4.6 x/y 5
11 1.1 D 4.7 x/y/z 1
12 1.1 D 4.7 x 1
13 3.3 D 4.8 x/u/v/w 1
Maintenant, je veux regrouper cela en deux colonnes comme suit:
df.groupby(['col5','col2']).reset_index()
Production:
index col1 col2 col3 col4 col5
col5 col2
1 A 0 0 1.1 A 1.1 x/y/z 1
D 0 11 1.1 D 4.7 x/y/z 1
1 12 1.1 D 4.7 x 1
2 13 3.3 D 4.8 x/u/v/w 1
2 B 0 3 2.6 B 2.6 x/u 2
1 5 3.4 B 3.8 x/u/v 2
3 A 0 1 1.1 A 1.7 x/y 3
1 2 1.1 A 2.5 x/y/z/n 3
2 7 2.6 A 4.2 x 3
C 0 9 3.4 C 4.5 - 3
4 B 0 4 2.5 B 3.3 x 4
5 B 0 6 2.6 B 4 x/y/z 5
1 10 2.6 B 4.6 x/y 5
6 B 0 8 3.4 B 4.3 x/u/v/b 6
Je veux obtenir le nombre de chaque ligne comme suit. Production attendue:
col5 col2 count
1 A 1
D 3
2 B 2
etc...
Comment obtenir ma sortie attendue? Et je veux trouver le plus grand nombre pour chaque valeur «col2»?
Réponses:
Suivi de la réponse de @ Andy, vous pouvez faire ce qui suit pour résoudre votre deuxième question:
la source
Vous recherchez
size
:Pour obtenir la même réponse que waitkuo (la "deuxième question"), mais légèrement plus claire, il faut grouper par niveau:
la source
Insérer des données dans une trame de données pandas et fournir le nom de la colonne .
Voici nos données imprimées:
Pour créer un groupe de dataframe dans pandas et counter ,
vous devez fournir une colonne supplémentaire qui compte le groupement, appelons cette colonne comme " COUNTER " dans dataframe .
Comme ça:
PRODUCTION:
la source
Solution idiomatique qui n'utilise qu'un seul groupby
Explication
Le résultat de la
size
méthode groupby est une série aveccol5
etcol2
dans l'index. À partir de là, vous pouvez utiliser une autre méthode groupby pour trouver la valeur maximale de chaque valeur dans,col2
mais ce n'est pas nécessaire. Vous pouvez simplement trier toutes les valeurs par ordre décroissant, puis ne conserver que les lignes avec la première occurrence decol2
avec ladrop_duplicates
méthode.la source
name
dansreset_index()
la version actuelle de pandas: pandas.pydata.org/pandas-docs/stable/generated/…DataFrame
pasSeries
. Merci pour le lien.Si vous souhaitez ajouter une nouvelle colonne (par exemple 'count_column') contenant les comptes des groupes dans le dataframe:
(J'ai choisi 'col5' car il ne contient pas de nan)
la source
Vous pouvez simplement utiliser le nombre de fonctions intégrées suivi de la fonction groupby
la source