Ich habe einen Datenrahmen, den ich mit zwei Variablen gruppieren möchte, und führe dann die Berechnung innerhalb dieser Variablen durch. Gibt es eine einfache Möglichkeit, dies zu tun, und die Informationen zurück in einen Datenrahmen zu setzen, wenn ich fertig bin, das heißt wie folgt aus:Berechnungen auf Pandas DataFrame mit groupby durchführen und dann wieder an einen DataFrame übergeben?
df=pd.DataFrame({'A':[1,1,1,2,2,2,30,12,122,345],
'B':[1,1,1,2,3,3,3,2,3,4],
'C':[101,230,12,122,345,23,943,83,923,10]})
total = []
avg = []
AID = []
BID = []
for name, group in df.groupby(['A', 'B']):
total.append(group.C.sum())
avg.append(group.C.sum()/group.C.nunique())
AID.append(name[0])
BID.append(name[1])
x = pd.DataFrame({'total':total,'avg':avg,'AID':AID,'BID':BID})
Aber offensichtlich viel effizienter?
ich so das Gefühl, ist die Antwort, aber ich habe noch eine Frage - sagen wir, dass ‚avg‘ ist wirklich die Summe() dividiert durch die einzigartige Elemente in einer anderen Spalte - wie würde ich diese andere Spalte referenzieren. np.sum/np.unique (Gruppe ['andere_Spalte'])? Ist das sinnvoll? – user1566200
Das würde ich wahrscheinlich in zwei Schritten machen. 'df1 = df.groupby (['A', 'B']) ['C'] .agg ({'Gesamt': np.sum}); df1 ['avg'] = df1.total/df.groupby(['A ',' B ']) [' ander ']. agg ({' num ': pd.Series.nunique}). num; df1.reset_index() 'so etwas wie das; – Psidom