2013-10-16 35 views
13

C'è un modo per strutturare i comandi di gruppoby e qcut di Pandas per restituire una colonna che ha tessere nidificate? Specificamente, supponiamo di avere 2 gruppi di dati e voglio applicare qcut a ciascun gruppo e quindi restituire l'output a una colonna. Questo sarebbe simile al comando ntile() di MS SQL Server che consente di partizionare con().Pandas groupby e 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 

Nel dataframe sopra desidero applicare la funzione di qCut B mentre partizionamento A per ritornare C.

risposta

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) 

rendimenti

 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 
Problemi correlati