【问题标题】:What does the following statement do - df.groupby("level")["attempt"].mean()?以下语句做了什么 - df.groupby("level")["attempt"].mean()?
【发布时间】:2021-07-02 09:03:45
【问题描述】:

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

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()) 语句实际上是什么吗?

【问题讨论】:

  • 这是attempt 列对于level 的每个值的平均值。
  • 您对groupby() 的示例使用不是正常的使用方式。通常您按一个或多个实际列分组。
  • @Barmar Ohk,所以就像第一个值按该列分组,然后第二个值只显示该级别的值?在本例中,该列将按级别排序,对应的将是该级别尝试的平均值?

标签: python pandas dataframe data-visualization analytics


【解决方案1】:

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

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

在这种情况下,您正在使用“级别”列的值来拆分数据框。

然后您只选择“尝试”列并应用均值函数,然后将其值重新组合在一起。

所以在英语中,您的结果是每个“级别”的所有记录的平均值。也就是说,在下面的示例中,级别 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

【讨论】:

  • 而且,如果我们要删除 .mean(),我们会得到 2 列——Level 和 Attempt,其中 level 将从 1 到 4 排序以及对应的尝试值?跨度>
  • 你可以iterate在一个groupby对象上:for grp, dfg in df.groupby("level"): ..
【解决方案2】:

假设一个数据框像

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

然后您要求“尝试”列(这里我们只有两列,但您可能有更多)。对于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

【讨论】:

  • 如果您删除mean,您将拥有pandas.core.groupby.generic.SeriesGroupBy object。您可以通过多种方式访问​​和阐述其价值。看看documentation
猜你喜欢
  • 1970-01-01
  • 2011-08-27
  • 2014-12-22
  • 1970-01-01
  • 2013-10-25
  • 2016-10-17
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多