Pandas进阶肆 分组
pandas进阶系列根据datawhale远昊大佬的joyful pandas教程写一些自己的心得和补充,本文部分引用了原教程,并参考了《利用Python进行数据分析》、pandas官网
目前的进度是学习了整个课程并做了几个练一练,习题还没有做,练一练的思考过程在下文中有展示
一、分组模式及其对象
1. 分组的一般模式
分组操作在日常生活中使用极其广泛,例如:
- 依据 性 别 \color{#FF0000}{性别} 性别分组,统计全国人口 寿 命 \color{#00FF00}{寿命} 寿命的 平 均 值 \color{#0000FF}{平均值} 平均值
- 依据 季 节 \color{#FF0000}{季节} 季节分组,对每一个季节的 温 度 \color{#00FF00}{温度} 温度进行 组 内 标 准 化 \color{#0000FF}{组内标准化} 组内标准化
- 依据 班 级 \color{#FF0000}{班级} 班级筛选出组内 数 学 分 数 \color{#00FF00}{数学分数} 数学分数的 平 均 值 超 过 80 分 的 班 级 \color{#0000FF}{平均值超过80分的班级} 平均值超过80分的班级
从上述的几个例子中不难看出,想要实现分组操作,必须明确三个要素: 分 组 依 据 \color{#FF0000}{分组依据} 分组依据、 数 据 来 源 \color{#00FF00}{数据来源} 数据来源、 操 作 及 其 返 回 结 果 \color{#0000FF}{操作及其返回结果} 操作及其返回结果。同时从充分性的角度来说,如果明确了这三方面,就能确定一个分组操作,从而分组代码的一般模式即:
df.groupby(分组依据)[数据来源].使用操作
例如第一个例子中的代码就应该如下:
df.groupby('Gender')['Longevity'].mean()
import numpy as np
import pandas as pd
df = pd.read_csv('../data/learn_pandas.csv')
2. 分组依据的本质
分组依据的本质是所依据的项的unique值
【练一练】
请根据上下四分位数分割,将体重分为high、normal、low三组,统计身高的均值。
【我的思路】
#先看下数据的分布
df.describe()
Height | Weight | Test_Number | |
---|---|---|---|
count | 183.000000 | 189.000000 | 200.000000 |
mean | 163.218033 | 55.015873 | 1.645000 |
std | 8.608879 | 12.824294 | 0.722207 |
min | 145.400000 | 34.000000 | 1.000000 |
25% | 157.150000 | 46.000000 | 1.000000 |
50% | 161.900000 | 51.000000 | 1.500000 |
75% | 167.500000 | 65.000000 | 2.000000 |
max | 193.900000 | 89.000000 | 3.000000 |
一开始的写法是查看describe的数据分布,然后手工取其中的分位数,实际工程肯定不能这么做,然后搜了下series.quantile
是求分位数的实例方法,之前几章应该有学过,用的少还是不熟练得搜一下才知道,感谢这道题帮我强化记忆!
这里查了一下,groupby的分组依据
可以是mapping
, function
, label
, or list of labels</