Pandas分组聚合_Python数据分析与可视化

Pandas分组聚合

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

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

分组

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

单列和多列分组

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

csharp 复制代码
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 进行分组:

csharp 复制代码
df["A"].groupby(df["B"])   #df的 A 列根据 B 进行分组

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

数据类型分组:

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

传入字典分组:

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

获取单个分组

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

csharp 复制代码
df.groupby("A").get_group(2)
Output:
   A     B  C    D
1  2  2015  b  0.9
2  2  2014  c  2.1
4  2  2015  e  0.5

对分组进行迭代

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

csharp 复制代码
for name,data in df.groupby("A"):
        print(name)
        print(data)
Output:
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 方法聚合。


常用的聚合函数:

应用单个聚合函数

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

csharp 复制代码
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()       #对分组进行求和

应用多个聚合函数

csharp 复制代码
df.groupby("B").agg([np.sum,np.mean,np.std])

自定义函数传入 agg() 中

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

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

csharp 复制代码
mapping = {"A":np.sum,"B":np.mean}
df.groupby("C").agg(mapping)
相关推荐
come112341 分钟前
Codex 下不同场景 模式选择
python
神也畏惧菠萝40 分钟前
Day08 Python流程控制从入门到上瘾:if/match/while/for四件套,从B站登录一路打到猜数字游戏
python·算法·数据存储·for·while·if·ifelse
言乐61 小时前
通过 3D 动画直观演示球形瓶内可滑动半圆机构在倾倒时防粘盖、回正时刮膏体的运动学过程
python·3d·django·virtualenv·pygame
quantdash_cc1 小时前
ETF 行情数据清洗实战:字段语义拆解、标的池整理与五个校验清单
python·数据分析·pandas·量化交易·股票数据·quantdash
小熊恋旧1 小时前
Python 面向对象编程:方法、属性、继承与多态详解
开发语言·python
威哥爱编程2 小时前
Python 智能体开发实战 05:一问教材内容它就编?先把答案从你自己的资料里检索出来
python·agent
java_prinln2 小时前
RAG 面试题介绍
python·agent
威哥爱编程2 小时前
Python 智能体开发实战 06:一个函数里塞了八百行?用状态机把批改流程拆成能回退的步骤
python·agent
Patrick在香港3 小时前
一个斜杠,把毫秒变成十几秒
android·数据库·python·性能优化·正则表达式·回溯·redos
2601_967980113 小时前
Python 初学者必备的常用内置函数
python·编程语言·内置函数·初学者·常用函数