簡體   English   中英

熊貓數據框:按兩列分組,然后對另一列取平均值

[英]Pandas dataframe: Group by two columns and then average over another column

假設我有一個具有以下值的數據框:

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

我想首先根據前兩列(col1和col2)對數據框進行分組,然后對第三列的值(值)進行平均。 因此,所需的輸出將如下所示:

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'>

任何幫助將非常感激。

您需要將列的列表傳遞給groupby,您傳遞的內容被解釋axis參數,這就是它引發錯誤的原因:

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

如果要按多列分組,則應將它們放在列表中:

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

或稍微冗長一些,以便在聚合數據框中使用單詞“ avg”:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM