2013-10-16 27 views
13

Gibt es eine Möglichkeit, Pandas groupby- und qcut-Befehle so zu strukturieren, dass eine Spalte mit verschachtelten Kacheln zurückgegeben wird? Angenommen, ich habe zwei Datengruppen und möchte qcut auf jede Gruppe anwenden und dann die Ausgabe an eine Spalte zurückgeben. Dies wäre ähnlich dem Befehl ntile() von MS SQL Server, der Partition by() zulässt.Pandas groupby und qcut

 A B C 
0 foo 0.1 1 
1 foo 0.5 2 
2 foo 1.0 3 
3 bar 0.1 1 
4 bar 0.5 2 
5 bar 1.0 3 

Im Datenrahmen oben Ich möchte die qcut Funktion B aufzubringen, während Partitionierung auf A C. zurückzukehren

Antwort

24
import pandas as pd 
df = pd.DataFrame({'A':'foo foo foo bar bar bar'.split(), 
        'B':[0.1, 0.5, 1.0]*2}) 

df['C'] = df.groupby(['A'])['B'].transform(
        lambda x: pd.qcut(x, 3, labels=range(1,4))) 
print(df) 

Ausbeuten

 A B C 
0 foo 0.1 1 
1 foo 0.5 2 
2 foo 1.0 3 
3 bar 0.1 1 
4 bar 0.5 2 
5 bar 1.0 3