2016-06-23 10 views
9

mit dem folgenden Datenrahmen:Pandas Anzahl Zeilen innerhalb Gruppe

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 

Ich möchte Spalte ‚C‘ erzeugen, die Zahlen, die die Zeilen in jeder Gruppe in den Spalten A und B wie folgt aus:

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 

ich habe das bisher versucht:

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

... aber keine Würfel! Vielen Dank im Voraus!

Antwort

16

Verwendung 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