zoukankan      html  css  js  c++  java
  • pandas进阶

    educoder实训作业:

    分组聚合:

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

    • 分割步骤将DataFrame按照指定的键分割成若干组;

    • 应用步骤对每个组应用函数,通常是累计、转换或过滤函数;

    • 组合步骤将每一组的结果合并成一个输出数组。

    分组

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

    单列和多列分组

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

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

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

    1 df["A"].groupby(df["B"])   #df的 A 列根据 B 进行分组
    通过数据类型或者字典分组

    数据类型分组:

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

    传入字典分组:

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

    使用get_group()方法可以选择一个组:

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

    可获得分组详情:

    对分组进行迭代

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

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

    可实现:

    将是同一个名字的分为一组

     1 1
     2    A     B  C    D
     3 0  1  2014  a  0.5
     4 2
     5    A     B  C    D
     6 1  2  2015  b  0.9
     7 2  2  2014  c  2.1
     8 4  2  2015  e  0.5
     9 3
    10    A     B  C    D
    11 3  3  2014  d  1.5
    12 4
    13    A     B  C    D
    14 5  4  2017  f  0.1
    聚合

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

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

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

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

    应用多个聚合函数:

    1 df.groupby("B").agg([np.sum,np.mean,np.std])
    自定义函数传入agg()中

    #自定义函数,对组间进行自定义运算。

    1 def result(df):
    2 return df.max() - df.min()
    3 df.groupby("B").agg(result) #求每一组最大值与最小值的差
    对不同的列使用不同的聚合函数
    1 mapping = {"A":np.sum,"B":np.mean}
    2 df.groupby("C").agg(mapping)

    例题:

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

    可实现代码:

     1 import pandas as pd
     2 import numpy as np
     3 
     4 #返回最大值与最小值的差
     5 def sub(df):
     6     ######## Begin #######
     7     #求最大值与最小值之差
     8     return df.max() - df.min()
     9     ######## End #######
    10 
    11 def main():
    12     ######## Begin #######
    13     data = pd.read_csv("step1/drinks.csv")#将表格资源读入
    14     #创建可视化模型
    15     df = pd.DataFrame(data)
    16     #对数据进行分组聚合
    17     mapping = {"wine_servings":sub,"beer_servings":np.sum}
    18     #打印信息
    19     print(df.groupby("continent").agg(mapping))
    20     ######## End #######
    21 
    22 if __name__ == '__main__':
    23     main()

    运行结果:

       本次博客内容出自educoder作业实训项目,实训题材出自专业人士,他们对pandas进阶类项目有着非常成熟且敏锐的洞察力,这让练习并学习着的我们有了非常之大的收获,希望通过自己的又一遍回顾学习能对之有更深远的理解,同时以此分享给大家,能和大家一同进步成长。

  • 相关阅读:
    android kl文件
    ELF文件结构描述
    jquery开头
    win7无声音显示“未插入扬声器或耳机” 怎么解决
    xhtml头文件设置
    break和continue的区别
    php目录函数
    mysql语法
    php中怎么导入自己写的类
    截取文件后缀名
  • 原文地址:https://www.cnblogs.com/Wang1107/p/12402930.html
Copyright © 2011-2022 走看看