以下语句的作用 - df.groupby("level")["attempt"].mean()?

What does the following statement do - df.groupby("level")["attempt"].mean()?

好的,所以我正在查看一些数据分析(非常基础)项目。我遇到了这条线-

print(df.groupby("level")["attempt"].mean())

其中 df 是文件的数据框 https://raw.githubusercontent.com/whitehatjr/Data-Analysis-by-visualisation/master/data.csv

基本上,据我所知,这是三年级学生尝试测验的数据,这是有水平的。现在,我知道的 groupby() 的唯一用法是 -

#First Usage
q = df.groupby('')

#Second Usage
w = df.groupby(['', ''])

谁能给我解释一下,语句 print(df.groupby("level")["attempt"].mean()) 到底是什么?

假设数据框像

df = pd.DataFrame(np.array([[1,1,1,1,2,2,3,3,3,3,4,4,5,5,6,6,6,6],
                            [1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9]]).T,
                  columns=['level', 'attempt'])

现在,df.groupby("level") 正在根据“级别”列的值对您的数据框进行分组:您将有一组用于 level==1,一组用于 level==2,等等。

In [1]: df.groupby("level").get_group(1)
Out[1]: 
   level  attempt
0      1        1
1      1        2
2      1        3
3      1        4

那么你要的是“attempt”栏(这里我们只有两栏,但你可能有更多)。对于 level==1:

In [2]: df.groupby("level")["attempt"].get_group(1)
Out[2]: 
0    1
1    2
2    3
3    4

最后,您将计算分组列的平均值。对于 level==1:

In [3]: df.groupby("level")['attempt'].mean()[1]
Out[3]: 2.5

最终结果为:

In [4]: df.groupby("level")["attempt"].mean()
Out[4]:
level
1    2.50
2    5.50
3    6.25
4    2.50
5    4.50
6    7.50

这是来自 pandas pandas.DataFrame.groupby 文档的顶级描述:

groupby 操作涉及拆分对象、应用函数和组合结果的某种组合。这可用于对大量数据进行分组并对这些组进行计算操作。

在此上下文中,您使用 'level' 列的值来拆分数据框。

然后 select 仅“尝试”列并应用均值函数,然后将其值组合在一起。

所以在英语中,您的结果是每个 'level' 的所有记录的平均值。也就是说,在下面的示例中,级别 1 的所有记录的平均尝试值是 0.75144

import pandas as pd
import io
import requests
resp = requests.get('https://raw.githubusercontent.com/whitehatjr/Data-Analysis-by-visualisation/master/data.csv')
df = pd.read_csv(io.BytesIO(resp.content))
df.groupby("level")["attempt"].mean().reset_index()

输出:

     level   attempt
0  Level 1  0.751445
1  Level 2  0.863281
2  Level 3  0.698113
3  Level 4  0.734694