2016-02-23 32 views
7

üzerinde daha sonra ortalama:Pandalar dataframe: iki sütun tarafından Grubu ve aşağıdaki değerlere sahip bir dataframe olduğunu varsayarsak başka bir sütun

df: 
col1 col2 value 
1  2  3 
1  2  1 
2  3  1 
Ben ilk ilk iki sütun dayalı benim dataframe (col1 GroupBy istiyorum

ve col2) ve sonra da sütunların (değer) sütunlarının ortalama değerleri. Yani istenen çıktı şu şekilde görünecektir: Aşağıdaki kodu kullanıyorum

col1 col2 avg-value 
1  2  2 
2  3  1 

: Aşağıdaki hatayı alır

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()) 

: Herhangi bir yardım çok takdir

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

.

cevap

8

Sen, bunu bir hata kaldırdı yüzden axis param olarak yorumlandı geçti Ne GroupBy için sütunların listesini geçmesi gerekiyor: birden çok sütuna göre

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

gruplandırmak isterseniz, bunları bir liste halinde koymalıyız:

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())

Veya biraz daha ayrıntılı, sizin toplu dataframe kelimesini 'ort' alma uğruna:

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

Bu nasıl cevabımdan farklıdır? – EdChum

+0

Hayır, ama sadece cevabını 'post' tuşuna bastıktan sonra gördüm ... – jkokorian

+0

Endişelenme yok ama gerçek bir fark olmadıkça çift cevapları göndermemem iyi olur – EdChum

İlgili konular