2016-02-23 4 views
7

Unter der Annahme, dass ich einen Datenrahmen mit den folgenden Werten habe:Pandas Datenrahmen: Gruppe von zwei Säulen und dann durchschnittlich über eine andere Spalte

df: 
col1 col2 value 
1  2  3 
1  2  1 
2  3  1 

Ich möchte zuerst meinen Datenrahmen GROUPBY basierend auf den ersten beiden Spalten (col1 und col2) und dann über die Werte der dritten Spalte (Wert) gemittelt. So ist die gewünschte Ausgabe würde wie folgt aussehen:

col1 col2 avg-value 
1  2  2 
2  3  1 

ich den folgenden Code verwenden:

columns = ['col1','col2','avg'] 
df = pd.DataFrame(columns=columns) 
df.loc[0] = [1,2,3] 
df.loc[1] = [1,3,3] 
print(df[['col1','col2','avg']].groupby('col1','col2').mean()) 

, die die folgenden Fehler bekommen:

ValueError: No axis named col2 for object type <class 'pandas.core.frame.DataFrame'> 

Jede Hilfe wäre sehr geschätzt.

Antwort

8

Sie müssen eine Liste der Spalten zu übergeben GROUPBY, was Sie wurde als axis param interpretiert übergeben, weshalb es ein Fehler ausgelöst:

In [30]: 
columns = ['col1','col2','avg'] 
df = pd.DataFrame(columns=columns) 
df.loc[0] = [1,2,3] 
df.loc[1] = [1,3,3] 

print(df[['col1','col2','avg']].groupby(['col1','col2']).mean()) 
      avg 
col1 col2  
1 2  3 
    3  3 
3

Wenn Sie nach mehreren Spalten gruppieren möchten, können Sie sie in einer Liste sollten setzen:

columns = ['col1','col2','value'] df = pd.DataFrame(columns=columns) df.loc[0] = [1,2,3] df.loc[1] = [1,3,3] df.loc[2] = [2,3,1] print(df.groupby(['col1','col2']).mean())

Oder etwas ausführlicher, im Interesse der das Wort bekommen ‚avg‘ in Ihrem aggregierten Datenrahmen:

import numpy as np columns = ['col1','col2','value'] df = pd.DataFrame(columns=columns) df.loc[0] = [1,2,3] df.loc[1] = [1,3,3] df.loc[2] = [2,3,1] print(df.groupby(['col1','col2']).agg({'value': {'avg': np.mean}}))

+0

Wie ist das anders als meine Antwort? – EdChum

+0

Es ist nicht, aber ich sah nur Ihre Antwort, nachdem ich 'Post' gedrückt habe ... – jkokorian

+0

Keine Sorgen, aber es ist gut, keine doppelten Antworten zu posten, es sei denn, es gibt einen echten Unterschied – EdChum

Verwandte Themen