Ajouter une colonne de compteur séquentiel aux groupes dans Pandas DataFrame
Dans le contexte de la gestion des données, il existe une tâche courante consistant à ajouter un compteur séquentiel colonne aux groupes dans une trame de données pandas. Une approche consiste à utiliser une fonction de rappel comme vous l'avez démontré :
def callback(x): x['seq'] = range(1, x.shape[0] + 1) return x
Bien que cette méthode fonctionne, elle peut être lourde et implique de définir une fonction distincte. Une solution plus concise et élégante consiste à utiliser la méthode cumcount() :
df.groupby(['c1', 'c2']).cumcount()
Cette méthode calcule le nombre cumulé pour chaque groupe, attribuant efficacement un numéro séquentiel à chaque ligne d'un groupe. Par exemple, considérons le dataframe suivant :
index | c1 | c2 | v1 |
---|---|---|---|
0 | A | X | 3 |
1 | A | X | 5 |
2 | A | Y | 7 |
3 | A | Y | 1 |
4 | B | X | 3 |
5 | B | X | 1 |
6 | B | X | 3 |
7 | B | Y | 1 |
8 | C | X | 7 |
9 | C | Y | 4 |
10 | C | Y | 1 |
11 | C | Y | 6 |
L'application de cumcount() à ce dataframe, regroupé par c1 et c2, produirait :
index | c1 | c2 | v1 | seq |
---|---|---|---|---|
0 | A | X | 3 | 1 |
1 | A | X | 5 | 2 |
2 | A | Y | 7 | 1 |
3 | A | Y | 1 | 2 |
4 | B | X | 3 | 1 |
5 | B | X | 1 | 2 |
6 | B | X | 3 | 3 |
7 | B | Y | 1 | 1 |
8 | C | X | 7 | 1 |
9 | C | Y | 4 | 1 |
10 | C | Y | 1 | 2 |
11 | C | Y | 6 | 3 |
Pour commencer l'ordre à 1 à la place de 0, ajoutez simplement 1 au résultat cumcount() :
df.groupby(['c1', 'c2']).cumcount() + 1
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!