2017-02-03 5 views
1

Ich habe einen Datenrahmen, der mehrere Zeilen für jeden bestimmten user_id hat, und ich versuche, einen neuen Datenrahmen zu erstellen, der die Werte für jede user_id aggregiert. Zum Beispiel df die ursprüngliche Datenrahmen istWie bekomme ich den Wert der Spalte mit den maximalen Daten in einer Gruppe in Pandas?

id user_id  eventdate  col1  col2 
1  100   2015-10-01  2   A 
2  200   2015-11-01  4   B 
3  300   2015-12-01  1   A 
4  100   2016-02-01  3   B 
5  300   2016-03-01  6   C 

Daraus möchte ich eine neue Datenrahmen df_agg für jeden Benutzer wie folgt aus:

user_id  col1_sum  col2_latest 
100   5    B 
200   4    B 
300   7    C 

ich die col1_sum bekam durch einen groupby wie dies zu tun:

df_agg = pd.DataFrame({'col1_sum': df.groupby('NAME')['col1'].sum()}) 

Wie füge ich die col2_latest Spalte zu diesem Datenrahmen hinzu?

Antwort

1

Sie müssen aggregate von sum und last:

df_agg = df.groupby('user_id').agg({'col1':'sum','col2':'last'}) 
df_agg = df_agg[['col1','col2']].rename(columns={'col1':'col1_sum','col2':'col2_latest'}) 
           .reset_index() 
print (df_agg) 
    user_id col1_sum col2_latest 
0  100   5   B 
1  200   4   B 
2  300   7   C 
+0

groß. wusste nicht, dass es eine letzte() Methode gab. akzeptiert. – sfactor

Verwandte Themen