Ich habe eine kategorische Variable und zwei numerische Spalten:Quantilsgrenzen Schwelle/Filter innerhalb Pandas GROUPBY
np.random.seed(123)
df = pd.DataFrame({'group' : ['a']*10+['b']*10,
'var1' : np.random.randn(20),
'var2' : np.random.randint(10,size=20)})
möchte ich finden, durch group
, der Mittelwert der var1
nach Filterung df
zum obersten Quartil verengen var2
Werte nach Gruppe. Das heißt, würde die Schwelle für jede Gruppe:
thresh = df.groupby('group')['var2'].quantile(0.75)
Hier ist eine loopy Demonstration das, was ich will am Ende mit:
for group, frame in df.groupby('group'):
print(frame[frame.var2 >= frame.var2.quantile(0.75)].var1.mean())
# -1.4713362407192072
# 0.15512098976530683
Das Ergebnis sollte ein Datenrahmen mit (group
, var
) seinen Spalten oder eine Serie indiziert von group
. Ich glaube, die Lösung kann beinhalten .transform
/.apply
aber bin dort stecken.
Sie wollen einen Datenrahmen der Gruppe var und die calucated Mittelwert oder möchte eine neue Spalte mit diesem Wert transformiert – Dark
@Bharathshetty neues Objekt statt neue Spalte erstellen –