2016-02-23 52 views
7

假設我有以下值的數據幀:熊貓數據框中:組兩列,然後平均在另一列

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

我想先GROUPBY基於前兩個欄我的數據框(col1和col2),然後對th列(value)的值進行平均。因此,所需的輸出應該是這樣的:

col1 col2 avg-value 
1  2  2 
2  3  1 

我使用下面的代碼:

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

它得到了以下錯誤:

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

任何幫助將非常感激。

回答

8

您需要通過列的列表GROUPBY,你通過什麼解釋爲axis PARAM這就是爲什麼它提出了一個錯誤:由多列

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

如果你想組,應該把它們放在一個列表:

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

或者稍微詳細,爲您彙總數據框獲得了這個詞「平均」的緣故:

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

這與我的回答有何不同? – EdChum

+0

這不是,但我只是按'後'後纔看到您的答案... – jkokorian

+0

不用擔心,但不要發佈重複的答案,除非有真正的差異 – EdChum