数据盲目分析(四)——案例带你快速入门Pandas(二)

434

这是我参与更文挑战的第4天,活动详情查看:更文挑战

前情回顾

  • 找到小明和李晓华计分不同的学号(已完成一半)
    • 找到计分不同的列(已完成)
    • 找到该列的学号
  • 对计分错误的学生的各科成绩进行分组求和(未完成)。

找到该列的学号

我们回忆以下之前简单介绍过的数据结构 ,数据结构的data对于series来说,是一个一维array数据,对于dataframe来说,是二维array数据。因此我们可以直接使用如下操作

data_clean.values[:,0]
//data_clean.values[:3,0]
//这里我只取前三行,因为单科数据也是我编的。

对计分错误的学生的各科成绩进行分组求和

单科数据如下

filepath_danke = "单科数据.csv"
data_table_danke = pd.read_csv(filepath_danke, encoding='utf-8')
data_table_danke

输出如下: 截屏2021-06-04 下午6.58.48.png

那么如何实现分组求和呢?

首先思考下分组求和的场景:

依据 [性别分组],统计全国人口 [寿命]的 [平均值] 依据 [班级分组],筛选出组内 [数学分数]的 [平均值]超过 80 分的班级

很明显,分组需要三种概念:

  • 依据什么分组
  • 获取什么数据
  • 对数据进行什么操作

这里我们需要依据[学号分组],统计出学生[成绩]的[总成绩和]。

那么pd为我们提供了group by的函数(这里就可以看出在命名上跟sql很像了)

df.groupby(依据什么分组)[获取什么数据].对数据进行什么操作

举个例子

student_sum = data_table_danke.groupby('学号')['成绩'].sum()
学号
20160003    548
20160006    489
20160010    221
Name: 成绩, dtype: int64

目前我们通过了一个简单的案例学到了筛选和分组求和,对于一些常用的数据分析操作来说,还差一个排序。那么我们就添加一个需求。

新增需求:每人科目最高分和次高分之和

从正常的逻辑上来说,应该先分组再排序再求和.

但我们很难对分组后的数据进行排序以后取前两位(至少我目前不会)

那么我们可以利用分组的一个特性

分组不会影响组内的排序

因此可以先排序后分组再求和

filepath_danke = "单科数据.csv"
data_table_danke = pd.read_csv(filepath_danke, encoding='utf-8')
data_table_danke.sort_values('成绩', ascending = False, inplace=True)
res = data_table_danke.groupby('学号').head(2).groupby('学号')['成绩'].sum()
res