2016-09-03 7 views
6

Nach dem Erstellen Datenrahmen mit einigen duplizierten Zelle Werte in der Spalte Namen zu erstellen:Wie zusammenzufassen und ein Datenrahmen bedeuten einen weiteren Datenrahmen

import pandas as pd 
df = pd.DataFrame({'Name': ['Will','John','John','John','Alex'], 
        'Payment': [15, 10, 10, 10, 15], 
        'Duration': [30, 15, 15, 15, 20]}) 

enter image description here

Ich möchte durch die Schaffung von anderen gehen DataFrame, in dem die duplizierten Werte in Name Spalte konsolidiert sind und keine Duplikate hinterlassen. Zur gleichen Zeit möchte ich Summe der Zahlungen, die John gemacht hat. Ich gehe mit:

df_sum = df.groupby('Name', axis=0).sum().reset_index() 

enter image description here

Aber da df.groupby('Name', axis=0).sum() Befehl, um die Summenfunktion für jede Spalte in Datenrahmen gilt die Dauer (des Besuchs in Minuten) -Spalte als gut verarbeitet. Stattdessen möchte ich einen Durchschnittswert für die Spalte Dauer erhalten. So würde ich brauche mean() Methode zu verwenden, etwa so:

df_mean = df.groupby('Name', axis=0).mean().reset_index() 

enter image description here

Aber mit mean() Funktion der Spalte Zahlung jetzt ist den durchschnittlichen Zahlungswert zeigt John gemacht und nicht die Summe aller Zahlungen .

Wie erstellt man einen Datenrahmen, in dem Duration-Werte die Durchschnittswerte anzeigen, während die Zahlungswerte die Summe anzeigen?

+0

Bitte nicht eingebettete Bilder verwenden Sie; Benutze stattdessen Text. Bilder können nicht kopiert und in eine Konsole eingefügt werden, was bedeutet, dass Sie jeden, der mit Ihrem Beispiel übereinstimmen möchte, bitten, diesen manuell einzugeben. (Siehe [hier] (http://meta.stackoverflow.com/a/285557/487339) für mehr.) – DSM

+0

@DSM, um fair zu sein - ihr allererster Codeblock hat den Code, um den ursprünglichen DataFrame zu erstellen :) (sowie die Befehle, die ausgegeben wurden, um die Ergebnisse zu erstellen ...) –

+0

@NinjaPuppy: das ist nur einer der vielen Gründe, Bilder nicht einzubetten (siehe den Meta-Beitrag, den ich verlinkt habe, zB) – DSM

Antwort

8

Sie können verschiedene Funktionen auf unterschiedliche Spalten mit groupby.agg gelten:

df.groupby('Name').agg({'Duration': 'mean', 'Payment': 'sum'}) 
Out: 
     Payment Duration 
Name     
Alex  15  20 
John  30  15 
Will  15  30 
+1

Große Antwort. Ein weniger eleganter Ansatz wäre, den Datenrahmen aufzuteilen, die beiden Funktionen anzuwenden und sie dann zusammen zu kombinieren: pd.concat ([df.loc [:, ['Dauer', 'Name']]. Groupby ('Name'). mean(), df.loc [:, ['Zahlung', 'Name']]. groupby ('Name'). sum()], axis = 1) – adabsurdum

Verwandte Themen