栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

educutor Pands进阶分组聚合

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

educutor Pands进阶分组聚合

Pands进阶分组聚合
  • 任务描述
  • 相关知识
    • 分组
      • 单列和多列分组
      • Series系列分组
      • 通过数据类型或者字典分组
      • 获取单个分组
      • 对分组进行迭代
    • 聚合
      • 应用单个聚合函数
      • 应用多个聚合函数
      • 自定义函数传入agg()中
      • 对不同的列使用不同的聚合函数
  • 编程要求
  • 测试说明

任务描述

本关任务:使用Pandas加载drinks.csv文件中的数据,根据数据信息求每个大洲红酒消耗量的最大值与最小值的差以及啤酒消耗量的和。

相关知识

分组聚合的流程主要有三步:

  • 分割步骤将Dataframe按照指定的键分割成若干组;
  • 应用步骤对每个组应用函数,通常是累计、转换或过滤函数;
  • 组合步骤将每一组的结果合并成一个输出数组。

分组

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

单列和多列分组

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

import pandas as pddata = {'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    D1  2  2015  b  0.92  2  2014  c  2.14  2  2015  e  0.5
对分组进行迭代

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

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

输出:

1   A     B  C    D0  1  2014  a  0.52   A     B  C    D1  2  2015  b  0.92  2  2014  c  2.14  2  2015  e  0.53   A     B  C    D3  3  2014  d  1.54   A     B  C    D5  4  2017  f  0.1
聚合

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

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

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

import pandas as pdimport numpy as npdata = {'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_servingscontinentAfrica                   233           3258Asia                     123           1630Europe                   370           8720North America             99           3345Oceania                  212           1435South 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")
    df = pd.Dataframe(data)
    mapping = {"wine_servings":sub,"beer_servings":np.sum}
    print(df.groupby("continent").agg(mapping))
    ######## End #######
if __name__ == '__main__':
    main()
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/302564.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号