* 类似于SQL里面的group by 语句,不过pandas提供了更加复杂的函数方法
* 我们可以对index或者column进行分组,可以被一个元素,也可以是任意多个元素分组。分组后计算的方式是一样的,无论是基于index还是column.
*****
读文件
![](https://img.kancloud.cn/3e/07/3e07cf56d206e079946c4fa53482f8e7_1367x383.png)
*****
对director_name列的每个数据值进行频数统计
![](https://img.kancloud.cn/5f/8c/5f8c5af89b1d0d7a7db84a9898e8a4ec_305x265.png)
*****
```
#将数据集按director_name分组
grouped = df.groupby("director_name")
```
*****
#分组后对各组进行频数统计
```
grouped.size()
```
![](https://img.kancloud.cn/61/c2/61c26af7a86dcf66fee5f6ea9c5ef837_308x224.png)
*****
```
#可以看到每个分组的名字和在这个组下的各个索引
grouped.groups
```
![](https://img.kancloud.cn/61/fc/61fc1faf3da6a3adfd7a77a6ff411ebb_775x182.png)
*****
```
# 可以看到各个分组的名字,和每个分组下组内的各个数据
for name,group in grouped:
print(name)
print(group)
```
*****
**把导演名字列作为索引,然后按照索引分组**
![](https://img.kancloud.cn/39/15/391514c76d079924b4b0ac0df4b6a5ca_1134x458.png)
```
# 按照第一层索引分组
#g2 = df1.groupby(level=0)
g2 = df1.groupby(level=["director_name"])
```
![](https://img.kancloud.cn/4b/9a/4b9ad434350340c91ba724919289ed66_1039x148.png)
### 2.2.1. 统计计算
1. 单个统计量计算 mean/sum/std
2. 多个统计量计算
3. 不同列应用不同统计量
分组计算很重要的一点是:**我们的每一个统计函数都是作用在每一个group上,不是单个样本,也不是全部数据**
![](https://img.kancloud.cn/36/ee/36eee2b7121b1fad6c70a213edf5768a_1298x307.png)
*****
对每个导演电影的时长进行求和统计
![](https://img.kancloud.cn/72/5d/725db3380df8dc95a612b7d4b7b48f07_355x287.png)
*****
对每组的两列进行统计
![](https://img.kancloud.cn/d9/dc/d9dc1d572a4da054d72af277d84c17d5_390x456.png)
*****
对多个列进行多个统计量的统计
![](https://img.kancloud.cn/22/56/22569c0e0adc7cda8ce34474ff4d6edb_686x313.png)
*****
![](https://img.kancloud.cn/33/bc/33bc781a4330b460aa7314d2556f3fc2_581x367.png)
*****
### 2.2.2. Transformation
基于每个分组操作,对组内元素进行转换
```
#将缺失值都填充为0
df1 = df.fillna(0)
#将数据集按导演名字分组
grouped = df1.groupby("director_name")
#lambda表达式 z分数计算
z_score = lambda s : (s-s.mean())/ s.std()
#将每个列的每个组内元素根据z_score进行计算转换,s.mean()是每个组的平均值
grouped[['num_critic_for_reviews','duration','director_facebook_likes']].transform(z_score)
```
*****
![](https://img.kancloud.cn/d4/fd/d4fd9451aba9097818e2d6d03467a2e2_475x233.png)
### 2.2.3. Filteration
分组过滤
```
#选出duration平均值大于等于150的分组
grouped.filter(lambda g : g['duration'].mean() >= 150)
```
![](https://img.kancloud.cn/12/fb/12fbacfcef6ce9bff5e2fdc24c76f5df_1176x236.png)
*****
```
#选出组内数据数目大于等于10的分组
grouped.filter(lambda g : len(g) >=10)
```
![](https://img.kancloud.cn/27/ab/27ab670eb55e27a9199a4a3c10e6b6d0_1178x365.png)
- 第五节 Pandas数据管理
- 1.1 文件读取
- 1.2 DataFrame 与 Series
- 1.3 常用操作
- 1.4 Missing value
- 1.5 文本数据
- 1.6 分类数据
- 第六节 pandas数据分析
- 2.1 索引选取
- 2.2. 分组计算
- 2.3. 表联结
- 2.4. 数据透视与重塑(pivot table and reshape)
- 2.5 官方小结图片
- 第七节 NUMPY科学计算
- 第八节 python可视化
- 第九节 统计学
- 01 单变量
- 02 双变量
- 03 数值方法
- 第十节 概率
- 01 概率
- 02 离散概率分布
- 03 连续概率分布
- 第一节 抽样与抽样分布
- 01抽样
- 02 点估计
- 03 抽样分布
- 04 抽样分布的性质
- 第十三节 区间估计
- 01总体均值的区间估计:𝝈已知
- 02总体均值的区间估计:𝝈未知
- 03总体容量的确定
- 04 总体比率