第1关:Pandas分组聚合

本篇博客主要介绍了如何使用Pandas进行数据分组和聚合操作,以解决计算每个大洲红酒消耗量最大值与最小值之差及啤酒消耗量总和的任务。首先讲解了分组聚合的三步流程,然后详细阐述了Pandas的groupby()函数,包括单列、多列分组,Series分组以及数据类型的分组方式。此外,还提到了如何获取特定分组和对分组进行迭代。最后,介绍了聚合函数的应用,包括单个和多个聚合函数的使用,以及自定义函数在agg()方法中的应用,并给出了一个实际编程任务,要求根据continent分组计算酒类消耗统计。
部署运行你感兴趣的模型镜像

任务描述

本关任务:使用Pandas加载drinks.csv文件中的数据,根据数据信息求每个大洲红酒消耗量的最大值与最小值的差以及啤酒消耗量的和。
相关知识
*分组聚合的流程主要有三步:

  1. 分割步骤将DataFrame按照指定的键分割成若干组;
  2. 应用步骤对每个组应用函数,通常是累计、转换或过滤函数;
  3. 组合步骤将每一组的结果合并成一个输出数组。*
    在这里插入图片描述

分组
通常我们将数据分成多个集合的操作称之为分组,Pandas中使用groupby()函数来实现分组操作。

单列和多列分组
对分组后的子集进行数值运算时,不是数值的列会自动过滤

import pandas as pd  
data = {'A': [1, 2, 2, 3, 2, 4],  
        'B': [2014, 2015, 2014, 2014, 2015, 2017],  
        'C': ["a", "b", "c", "d", "e", "f"],  
        'D': [0.5, 0.9, 2.1, 1.5, 0.5, 0.1]  
        }  
df = pd.DataFrame(data)  
df.groupby("B")   #单列分组  返回的是一个groupby对象  
df.groupby(["B","C"])    #多列分组  

Series系列分组
选取数据帧中的一列作为index进行分组:

df["A"].groupby(df["B"])   #df的 A 列根据 B 进行分组  

通过数据类型或者字典分组
数据类型分组:

df.groupby(df.dtypes,axis=1)   # axis=1表示按列分组,以数据类型为列名  

传入字典分组:

dic = {"A": "number", "B": "number", "C": "str", "D": "number"}  
df.groupby(dic, axis=1)   #按列分组,列名是字典的值  

获取单个分组
使用get_group()方法可以选择一个组。

df.groupby("A").get_group(2)  

输出:

   A     B  C    D  
1  2  2015  b  0.9  
2  2  2014  c  2.1  
4  2  2015  e  0.5  

对分组进行迭代
GroupBy对象支持迭代,可以产生一组二元元组(由分组名和数据块组成)。

for name,data in df.groupby("A"):  
        print(name)  
        print(data)  

输出:

1  
   A     B  C    D  
0  1  2014  a  0.5  
2  
   A     B  C    D  
1  2  2015  b  0.9  
2  2  2014  c  2.1  
4  2  2015  e  0.5  
3  
   A     B  C    D  
3  3  2014  d  1.5  
4  
   A     B  C    D  
5  4  2017  f  0.1  

聚合
聚合函数为每个组返回单个聚合值。当创建了groupby对象,就可以对分组数据执行多个聚合操作。比较常用的是通过聚合函数或等效的agg方法聚合。常用的聚合函数如下表:

函数名说明
count分组中非空值的数量
sum非空值的和
mean非空值的平均值
median非空值的中位数
std、var无偏标准差和方差
min、max非空值的最小和最大值
prod非空值的积
first、last第一个和最后一个非空值

应用单个聚合函数
对分组后的子集进行数值运算时,不是数值的列会自动过滤

import pandas as pd  
import numpy as np  
data = {'A': [1, 2, 2, 3, 2, 4],  
        'B': [2014, 2015, 2014, 2014, 2015, 2017],  
        'C': ["a", "b", "c", "d", "e", "f"],  
        'D': [0.5, 0.9, 2.1, 1.5, 0.5, 0.1]  
        }  
df = pd.DataFrame(data)  
df.groupby("B").sum()       #对分组进行求和  

应用多个聚合函数

df.groupby("B").agg([np.sum,np.mean,np.std])  

自定义函数传入agg()中

def result(df):  
    return df.max() - df.min()  
df.groupby("B").agg(result)  #求每一组最大值与最小值的差  

对不同的列使用不同的聚合函数

mapping = {"A":np.sum,"B":np.mean}  
df.groupby("C").agg(mapping)  

编程要求
使用Pandas中的read_csv()函数读取step1/drinks.csv中的数据,数据的列名如下表所示,请根据continent分组并求每个大洲红酒消耗量的最大值与最小值的差以及啤酒消耗量的和。在右侧编辑器begin-end处补充代码。

列名说明
country国家名
beer_servings啤酒消耗量
spirit_servings白酒消耗量
wine_servings红酒消耗量
total_litres_of_pure_alcohol纯酒精总量
continent大洲名
测试说明
平台会对你编写的代码进行测试:

测试输入:
预期输出:

               wine_servings  beer_servings  
continent  
Africa                   233           3258  
Asia                     123           1630  
Europe                   370           8720  
North America             99           3345  
Oceania                  212           1435  
South America            220           2101  
import pandas as pd
import numpy as np

#返回最大值与最小值的差
def sub(df):
    ######## Begin #######
    return df.max()-df.min()
    ######## End #######

def main():
    ######## Begin #######
    data = pd.read_csv("step1/drinks.csv",header = 0)#读取数据
    df = pd.DataFrame(data)#转换为Pandas DataFrame 数据
    mapping = {"wine_servings":sub,"beer_servings":np.sum}
    print(df.groupby("continent").agg(mapping))#根据continet分组,并使用不同的聚合函数

    ######## End #######

if __name__ == '__main__':
    main()

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-阿呆-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值