2016-06-23 1 views
9

Compte tenu de la trame de données suivantes:Pandas NUMBER lignes Au sein du Groupe

import pandas as pd 
import numpy as np 
df=pd.DataFrame({'A':['A','A','A','B','B','B'], 
       'B':['a','a','b','a','a','a'], 
       }) 
df 

    A B 
0 A a 
1 A a 
2 A b 
3 B a 
4 B a 
5 B a 

je voudrais créer colonne « C », qui numérote les lignes de chaque groupe dans les colonnes A et B comme ceci:

A B C 
0 A a 1 
1 A a 2 
2 A b 1 
3 B a 1 
4 B a 2 
5 B a 3 

J'ai essayé ce jusqu'à présent:

df['C']=df.groupby(['A','B'])['B'].transform('rank') 

... mais pas de dés! Merci d'avance!

Répondre

16

Utilisation groupby/cumcount:

In [25]: df['C'] = df.groupby(['A','B']).cumcount()+1; df 
Out[25]: 
    A B C 
0 A a 1 
1 A a 2 
2 A b 1 
3 B a 1 
4 B a 2 
5 B a 3