[FIXED] Erstellen Sie Bins auf Groupby in Pandas

Ausgabe

Mein Datenrahmen hat eine Spalte departmentundrank

name  dept  Rank
"A"  "ENG"  1
"A"  "MGMT"  1
"B"  "ENG"  2
"C"  "MGMT"  2
"D"  "MGMT"  3
"E"  "ENG"  3

Ich möchte in jedem Bins erstellen dept.

name  dept  Rank  Comment
"A"  "ENG"  1  Good
"A"  "MGMT"  1  Good
"B"  "ENG"  2  Avg
"C"  "MGMT"  2  Avg
"D"  "MGMT"  3  Poor
"E"  "ENG"  3  Poor

Ich kann dies mit dem folgenden Code tun

 df['Comment'] = pd.qcut(df[df['dept'] == "ENG"]['Rank'], q=[0.0, .25, .5, 1.0], labels=['Good', 'Avg', 'Poor'])
 df['Comment'] = pd.qcut(df[df['dept'] == "MGMT"]['Rank'], q=[0.0, .25, .5, 1.0], labels=['Good', 'Avg', 'Poor'])

Ich bin mir sehr sicher, dass es einen Weg geben muss groupby, aber ich kann es nicht herausfinden.

Lösung

Sie können groupby.transform/ verwenden groupby.apply:

df['Comment'] = (df
 .groupby('dept')['Rank']
 .transform(lambda g:
     pd.qcut(g,
             q=[0, 1/3, 2/3, 3/3],   # changed
             labels=['Good', 'Avg', 'Poor']))
 )

NB. Quantile liegen im Bereich [0, 1], ich habe das Beispiel geändert.

Ausgabe:

  name  dept  Rank Comment
0    A   ENG     1    Good
1    A  MGMT     1    Good
2    B   ENG     2     Avg
3    C  MGMT     2     Avg
4    D  MGMT     3    Poor
5    E   ENG     3    Poor


Beantwortet von –
mozway


Antwort geprüft von –
David Goodson (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like

[FIXED] seaborn.boxplot und großformatiger Datenrahmen

Ausgabe Ich habe so eine DataFrame: Ich habe diese beiden Anweisungen nacheinander ausprobiert: sns.boxplot([dataFrame.mean_qscore_template,dataFrame.mean_qscore_complement,dataFrame.mean_qscore_2d]) sns.boxplot(x = "mean_qscore_template", y=…