aha*_*jib 10 python group-by average pandas
假设我有一个具有以下值的数据帧:
df:
col1 col2 value
1 2 3
1 2 1
2 3 1
Run Code Online (Sandbox Code Playgroud)
我想首先根据前两列(col1和col2)对我的数据帧进行分组,然后对第二列(值)的值进行平均.所以期望的输出看起来像这样:
col1 col2 avg-value
1 2 2
2 3 1
Run Code Online (Sandbox Code Playgroud)
我使用以下代码:
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())
Run Code Online (Sandbox Code Playgroud)
得到以下错误:
ValueError: No axis named col2 for object type <class 'pandas.core.frame.DataFrame'>
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激.
您需要将列的列表传递给groupby,您传递的内容被解释为axisparam,这就是它引发错误的原因:
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
Run Code Online (Sandbox Code Playgroud)
如果要按多列分组,则应将它们放在列表中:
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())
Run Code Online (Sandbox Code Playgroud)
为了使汇总数据框中的单词“ 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}}))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13083 次 |
| 最近记录: |