深入解析pandas数据聚合和重组
作者:西西弗斯推石头 发布时间:2023-11-17 17:45:51
介绍pandas数据聚合和重组的相关知识,仅供参考。
1GroupBy技术
1.1简介
简介:根据一个或多个键进行分组,每一组应用函数,再进行合并
分组的键有多种形式:
列表或数组,长度与待分组的轴一样
表示DataFrame某个列名的值
字典或Series,给出待分组轴上的值与分组名之间的对应关系
函数,用于处理轴索引或索引中的各个标签
实例:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from pandas import Series,DataFrame
df =DataFrame({'key1':list('aabba'),'key2':['one','two','one','two','one'],\
'data1':np.random.randn(5),'data2':np.random.randn(5)})
#根据key1进行分组,并计算data1的均值。
#注意下面的方式,取出来进行分组,而不是在DataFrame中分组,这种方式很灵活
#可以看到这是一个GroupBy对象,具备了应用函数的基础
#这个过程是将Series进行聚合,产生了新的Series
grouped = df['data1'].groupby(df['key1'])
print(grouped,'\n')
注:
取出来进行分组,而不是在DataFrame中分组分组键中的缺失值被排除在外 1.2对分组进行迭代
GroupBy对象支持迭代,可以产生一组二元元组(由分组名和数据块组成)
groupby默认在axis=0上进行分组,但可以设置在任何轴上分组
1.3选取一个或一组列
对于由DataFrame产生的GroupBy对象,如果用一个或一组列名进行索引,可实现选取部分列进行聚合的目的,即下面语法效果相同。
1.4通过字典或Series进行分组
假设已经知道列的分组方式,现在需要利用这个信息进行分组统计。
下面为groupby传入一个已知信息的字典:
相当于将每一个列重设名,再按新的名字进行求和。
Series也有这样的功能,被看作一个固定大小的映射,可以用Series作为分组键,pandas会自动检查对齐。
1.5利用函数进行分组
将函数、数组、字典、Series混用也ok,因为最终都会转换为数组
2数据聚合
2.1简介
简介:
这里的数据聚合是说任何能够从数组产生标量值的过程常见的聚合运算都有就地计算数据集统计信息的优化实现。当然不止这些,可以用自己定义的运算,还可以调用分组对象上已经定义好的任何方法。
例:quantile可计算Series或DataFrame列的样本分位数。
对于自己定义的聚合函数,只需将其传入aggregate或agg即可:
有些方法(describe)也可应用
自定义函数比经过优化的函数要慢得多,这是因为在构造中间分组数据块时存在非常大的开销(函数调用、数据重排等)
可使用的函数:
2.1面向列的多函数应用
有时候需要对不同的列应用不同的函数 ,或者对一列应用不同的函数
若传入一组函数或函数名,得到的DataFrame列就会以相应的函数命名
上面有个问题就是列名是自动给出的,以函数名为列名,若传入元组(name,function)组成的列表,就会自动将第一个元素作为列名
对两列都应用functions:
得到的结果的列名是层次化索引,可以直接用外层索引选取数据:
如果想对不同的列应用不同的函数,具体的办法是向agg传入一个从列映射到函数的字典:
2.2以‘无索引’的方式返回聚合数据
到目前为止,示例中的聚合数据都是由唯一的分组键组成的索引(可能还是层次化的)
由于并不是总需要如此,可以向groupby传入as_index = False禁用该功能
来源:https://blog.csdn.net/m0_58960107/article/details/130131381


猜你喜欢
- 一、实验介绍1.1 实验内容在本节课中,我们将讲解Pygame的常用对象及其操作,包括图形、动画、文字、音频等,确保同学们对Pygame有一
- 本文实例为大家分享了OpenCV实现直线检测的具体代码,供大家参考,具体内容如下1 介绍本文主要介绍OpenCV自带的直线检测函数Hough
- 如下所示:# coding: utf-8import paramikoimport MySQLdbdef main(): connectio
- 在使用pip安装Tensorflow后,在其目录中没有找到model目录,重复安装了两遍依然没有,原因未知。于是,使用源码安装的方法:(1)
- 如下所示:# -*- coding:utf-8 -*-import sysimport osfrom glob import globimp
- 本文实例讲述了php通过获取头信息判断图片类型的方法。分享给大家供大家参考。具体实现方法如下:$filename = '617.gi
- 我就废话不多说了,直接上代码吧!import urllib.requestimport requestsimport timeimport
- 本文实例讲述了Python使用tkinter库实现文本显示用户输入功能。分享给大家供大家参考,具体如下:#coding:utf-8from
- /** * @Purpose: Mysql数据库访问类 * @Package: * @Author: lisen@sellingclub.c
- 一. 开发前的准备1. 必须了解的知识 SDK:软件开发工具包,可以为开发者提供快速开发的工具沙箱环境:也就是测试环境支付宝支付金额的精度:
- 现在同类型的网站数不胜数,网站的功能或服务日趋同质化,大的方面看不出什么差别,差别就体现在细节上。“窥斑见豹”,细节成为网站最有力的表现形式
- 一 导言设计一个好的用户系统往往不是那么容易,Django提供的用户系统可以快速实现基本的功能,并可以在此基础上继续扩展以满足我们的需求。先
- 首先,先确认一下你的字段值是不是乱码,如果是,按照以下方法:我的字段值是来自于一个geojson字符串,我在对它解析时做了如下处理:prop
- 这就意味着数据库和表名在 Windows 中是大小写不敏感的,而在大多数类型的 Unix 系统中是大小写敏感的。一个特例是 Mac OS X
- MySQL时间盲注五种延时方法 (PWNHUB 非预期解)延时注入函数五种:sleep(),benchmark(t,exp),笛卡尔积,GE
- 打开sqlserver时提示评估期已过解决方法:打开sqlserver安装中心(注意:选择R2的安装中心)选择版本升级中途可能会出现需要重启
- 我们知道,C++和python各有优缺点,C++可以直接映射到硬件底层,实现高效运行,而python能够方便地来进行编程,有助于工程的快速实
- 用于操作数据库的SQL一般分为两种,一种是查询语句,也就是我们所说的 SELECT语句,另外一种就是更新语句,也叫做数据操作语句。言外之 意
- 介绍获取协程返回值的四种方式:1、通过ensure_future获取,本质是future对象中的result方2、使用loop自带的crea
- 构建网络ResNet由一系列堆叠的残差块组成,其主要作用是通过无限制地增加网络深度,从而使其更加强大。在建立ResNet模型之前,让我们先定