2017-12-05 3 views
1

Data SnippetPandas: Anzeige groupby Aggregat Statistik mit Daten

Ich versuche, eine neue Spalte zu meinem Datenrahmen hinzuzufügen, die den durchschnittlichen Kaufbetrag pro Benutzer anzeigt. Der Datenrahmen heißt trainDf und die untere Zeile des Codes erzeugt den Durchschnittswert nach Benutzer. Ich versuche zu lernen, wie man es als eine Spalte hinzufügt, um ähnlich dem obigen Bild anzuzeigen.

AveragePurchaseAmountUser = trainDf.groupby(by='User_ID')['Purchase_Amount'].mean() 

Vielen Dank im Voraus!

Antwort

0

können Sie versuchen:

trainDf['AveragePurchaseAmountUser'] = trainDf.groupby(['User_ID'])['Purchase_Amount'].mean() 
+0

Dies wird die 'AveragePurchaseAmountUser'-Spalte mit NaNs füllen, wie Pandas nicht Passen Sie die Reihe standardmäßig an die Datenrahmenspaltenwerte an. – Tim

+0

Bestätigt. Füllsäule mit NaNs – Kyle

0

I Dieses merge

avg_df = trainDf.groupby(by='User_ID')['Purchase_Amount'].mean().reset_index().rename(columns={'Purchase_Amount': 'Avg'}) 
trainDf = trainDf.merge(avg_df, on='User_ID') 
+0

Das hat auch funktioniert! Danke – Kyle

0

kehrt die Datenrahmen mit der neuen Spalte

def avg(df): 
    df['Average_Purchase_Amount'] = df['Purchase_Amount'].mean() 
    return df 

newDf = trainDf.groupby(by='User_ID').apply(avg) 

verwenden würde Und wenn Sie die Spalte als ein Serie können Sie diese Funktion anwenden:

def avgSeries(df): 
    return pd.Series(data = df['Purchase_Amount'].mean(), index = df.index) 

dann die Spalte später Datenrahmen hinzufügen

+0

Das hat funktioniert! Danke – Kyle

0

Dies ist, was transform ist für

AveragePurchaseAmountUser = trainDf.groupby(by='User_ID')['Purchase_Amount'].transform() .mean() 

ich nicht atm testen können, aber Sie könnten

...transform('mean') 

Stattdessen müssen

+0

Wenn ich diese Linie laufen lasse, produziert es den folgenden Fehler: AttributeError: "Funktion" Gegenstand hat kein Attribut "Durchschnitt" – Kyle

+0

Ich habe Klammern vergessen –