次の値のデータフレームがあると仮定します。
df:
col1 col2 value
1 2 3
1 2 1
2 3 1
最初に最初の2つの列(col1とcol2)に基づいてデータフレームをグループ化し、次にthirs列(値)の値を平均化します。したがって、必要な出力は次のようになります。
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
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
複数の列でグループ化する場合は、それらをリストに配置する必要があります。
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())
または、集計データフレームでWordの「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}}))