pandas系列之数据分组(三)分组后的汇总方式设置和索引重置

604 阅读2分钟

本文用到的表格内容如下:

image.png

先来看一下数据情形

import pandas as pd
​
​
life_df = pd.read_excel(r'C:\Users\admin\Desktop\生活用品表.xlsx')
print(life_df)

result:

      分类  编号    名称
0     水果   0    苹果
1     水果   1    橙子
2   生活用品   2    牙刷
3   生活用品   3    冰箱
4   生活用品   4   电视机
5     食物   0    苹果
6     食物   1    橙子
7     家电   3    冰箱
8     家电   4   电视机
9     大件   3    冰箱
10    大件   4   电视机
11    大件   5    茶几
12  生活用品   7  暖手宝宝
13  小说   8   红楼梦

1.使用多种方式进行汇总

前面2篇提到的按列分组和按Series分组都是直接在DataFrameGroupBy对象上调用的,这样分组以后所有列都做的同一种汇总运算,且一次只能使用一种汇总方式。若要使用多种汇总方式,还是要使用aggregate方法实现

1.1 一次使用多种汇总方式

life_df = pd.read_excel(r'C:\Users\admin\Desktop\生活用品表.xlsx')
print(life_df.groupby("分类").aggregate(['sum', 'count']))

result:

      编号                 名称      
     sum count          sum count
分类                               
大件    12     3      冰箱电视机茶几     3
家电     7     2        冰箱电视机     2
小说     8     1          红楼梦     1
水果     1     2         苹果橙子     2
生活用品  16     4  牙刷冰箱电视机暖手宝宝     4
食物     1     2         苹果橙子     2

1.2 针对不同的列做不同的汇总运算

life_df = pd.read_excel(r'C:\Users\admin\Desktop\生活用品表.xlsx')
print(life_df.groupby("分类").aggregate({"分类": "count", "名称": "sum"}))

result:

  分类           名称
​
分类                   
大件     3      冰箱电视机茶几
家电     2        冰箱电视机
小说     1          红楼梦
水果     2         苹果橙子
生活用品   4  牙刷冰箱电视机暖手宝宝
食物     2         苹果橙子

2.对分组后的结果进行重置

通过前面的运行结果可知,DataFrameGroupBy对象经过汇总计算以后的形式并不是标准的DataFrame形式。为了能对分组结果作进一步处理,我们需要把非标准的DataFrame形式转换为标准的DataFrame形式,所使用到的方法就是重置索引。关于重置索引,具体可以参考索引重置一文,这里仅举一个例子

life_df = pd.read_excel(r'C:\Users\admin\Desktop\生活用品表.xlsx')
print(life_df.groupby("分类").aggregate(['sum', 'count']).reset_index())

result:

     分类  编号                 名称      
        sum count          sum count
​
0    大件  12     3      冰箱电视机茶几     3
1    家电   7     2        冰箱电视机     2
2    小说   8     1          红楼梦     1
3    水果   1     2         苹果橙子     2
4  生活用品  16     4  牙刷冰箱电视机暖手宝宝     4
5    食物   1     2         苹果橙子     2