Ausgabe
Mein Datenrahmen hat eine Spalte department
undrank
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)