groupby 操作的不同参数

groupby 是数据分析中一个非常强大的操作,可以根据指定的规则将数据拆分成多个组,并对每个组进行聚合、转换或过滤等操作。我们逐个解释这些参数的作用,并通过数值举例进行说明。

参数解释

  1. by:分组依据

    • by 参数指定了分组的依据,可以是:
      • 函数:对于数据的每个索引(或列)应用该函数,生成一个新的值,根据这些值进行分组。
      • 字典Series:可以通过字典或 Series 来指定分组的规则。字典的键是原数据的索引,值是分组的标签。
      • ndarray:可以直接用数组来指定每一行或列所属的分组。
  2. axis:拆分的方向

    • axis 参数指定了操作的方向:
      • axis=0:按行分组(默认)。
      • axis=1:按列分组。
  3. level:多层索引的分组层级

    • level 参数适用于多层索引(MultiIndex)。可以指定按某个层级或多个层级进行分组。
  4. as_index:是否将分组键作为索引

    • 默认值是 True,即返回的结果会把分组的标签作为新的索引。
    • 如果设置为 False,则不会将分组标签作为索引,而是作为普通列显示。
  5. sort:是否对分组进行排序

    • 默认值是 True,表示对每个组的标签进行排序。
    • 如果设置为 False,则分组内的顺序与原数据中的顺序一致,通常会提高性能。
  6. group_keys:是否将组键添加到结果中

    • 默认值是 True,即返回的结果会包含分组键,标明每个组的来源。
    • 如果为 False,则不添加组键。
  7. observed:分类数据的显示方式

    • 当分组是分类数据时,observed=True 会只显示有实际数据的分类值,而不会显示所有的分类值(包括那些没有数据的分类)。
    • 如果设置为 False,则会显示所有可能的分类值。
  8. dropna:是否删除包含 NA 的组

    • 如果为 True,则包含 NA 值的组会被删除。
    • 如果为 False,NA 值会被当作一个组处理。

举例说明

假设我们有以下的 DataFrameSeries 数据:

import pandas as pd

# 创建一个 DataFrame
df = pd.DataFrame({
    'A': [1, 2, 2, 3, 4, 5],
    'B': ['X', 'Y', 'X', 'Y', 'X', 'Y'],
    'C': [10, 20, 30, 40, 50, 60]
})

输出:
在这里插入图片描述

1. by:按列分组

我们可以按照 B 列的值来对 df 进行分组:

grouped = df.groupby('B')
for name, group in grouped:
    print(f"Group: {name}")
    print(group)
print(grouped.sum())

输出:
在这里插入图片描述

2. axis:按列分组

如果你想按列分组而不是按行分组,可以设置 axis=1

grouped = df.groupby(axis=1, level=0)
for name, group in grouped:
    print(f"Group: {name}")
    print(group)

这个例子不太常见,通常 groupby 更常用于行分组,但这会按列的方式分组。输出中会提醒不建议这么做:
在这里插入图片描述

3. level:多层索引分组

假设你有一个多层索引的 DataFrame,你可以按指定的层级进行分组。

# 创建一个 MultiIndex DataFrame
index = pd.MultiIndex.from_tuples([('a', 1), ('a', 2), ('b', 1), ('b', 2)],
                                   names=['letter', 'number'])
df_multi = pd.DataFrame({
    'A': [1, 2, 3, 4],
    'B': [5, 6, 7, 8]
}, index=index)

# 按 'letter' 层级进行分组
grouped = df_multi.groupby(level='letter')
for name, group in grouped:
    print(f"Group: {name}")
    print(group)

输出:

Group: a
         A  B
letter number      
a      1      1  5
       2      2  6

Group: b
         A  B
letter number      
b      1      3  7
       2      4  8

更多例子

4. as_index:是否将分组键作为索引

我们可以设置 as_index=False,让分组键不成为新的索引。

grouped = df.groupby('B', as_index=False)
print(grouped.sum())

输出:
在这里插入图片描述

5. sort:是否排序分组

如果 sort=False,则按照原始数据的顺序进行分组,而不是按照分组键的顺序排序:

grouped = df.groupby('B', sort=False)
for name, group in grouped:
    print(f"Group: {name}")
    print(group)

输出:

Group: X
   A  B   C
0  1  X  10
2  2  X  30
4  4  X  50

Group: Y
   A  B   C
1  2  Y  20
3  3  Y  40
5  5  Y  60
6. dropna:是否删除包含NA值的组

如果你有一些 NA 值,并设置 dropna=True,它会删除包含 NA 的组:

df_with_na = pd.DataFrame({
    'A': [1, 2, 3, None, 5],
    'B': ['X', 'Y', 'X', 'Y', 'X'],
    'C': [10, 20, 30, 40, None]
})

grouped = df_with_na.groupby('B', dropna=True)
print(grouped.sum())

输出:

总结

  • groupby 是根据某些规则将数据拆分为多个组,然后对每个组进行计算。可以根据 byaxislevel 等参数灵活控制分组的方式。
  • 常用的操作包括按列分组、按层级分组、控制排序和是否删除包含 NA 值的组。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/947979.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

鸢尾花种类预测--数据集介绍

1.6 案例:鸢尾花种类预测--数据集介绍 学习目标 目标 知道sklearn中获取数据集的方法知道sklearn中对数据集的划分方法 本实验介绍了使用Python进行机器学习的一些基本概念。 在本案例中,将使用K-Nearest Neighbor(KNN)算法对鸢尾…

基于深度学习的视觉检测小项目(二) 环境和框架搭建

一、环境和框架要求 SAM的环境要求: Python>3.7 PyTorch>1.7 torchvision>0.8 YOLO V8的环境要求:YOLO集成在ultralytics库中,ultralytics库的环境要求: Python>3.7 PyTorch>1.10.0 1、确定pytorch版本…

Javascript算法——回溯算法(组合问题)

相关资料来自《代码随想录》,版权归原作者所有,只是学习记录 回溯 回溯模板 void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点…

Java Excel转PDF POI+Itext5

由于现在存在需求,通过Java将数据文本生成特点格式Excel,再输出为PDF。 调研了一些方案,最终决定使用POI写入Excel,再使用Itext5生成PDF。 在网上找了一些Itext的转换工具类,进行了一些改动。 目前市面上 Excel 转 PDF 的组件…

linux nginx maccms管理后台无法进入页面不存在和验证码不显示的问题

windows中运行maccms非常顺利,轻松搭建了。并一切正常。而我在linux中搭建缺遇到了一个非常奇怪的问题。进入管理后台,明明"admin.php"(比如重命名成a.php)的页面是存在的,访问时缺提示页面不存在!稍后就自动跳到首页了…

C# 服务调用RFC函数获取物料信息,并输出生成Excel文件

这个例子是C#服务调用RFC函数,获取物料的信息,并生成Excel文件 上接文章:C#服务 文章目录 创建函数创建结构编写源代码创建批处理文件运行结果-成功部署服务器C#代码配置文件注意!! 创建函数 创建结构 编写源代码 创建…

在 SQL 中,区分 聚合列 和 非聚合列(nonaggregated column)

文章目录 1. 什么是聚合列?2. 什么是非聚合列?3. 在 GROUP BY 查询中的非聚合列问题示例解决方案 4. 为什么 only_full_group_by 要求非聚合列出现在 GROUP BY 中?5. 如何判断一个列是聚合列还是非聚合列?6. 总结 在 SQL 中&#…

Postman测试big-event

报错500。看弹幕,知道可能是yml或sql有问题。 所以检查idea工作台, 直接找UserMapper检查,发现完全OK。 顺着这个error发现可能是sql有问题。因为提示是sql问题,而且是有now()的那个sql。 之后通过给的课件,复制课件…

SpringBoot 2.6 集成es 7.17

引言 在现代应用开发中,Elasticsearch作为一个强大的搜索引擎和分析引擎,已经成为许多项目不可或缺的一部分。Spring Boot作为Java生态中最受欢迎的微服务框架之一,其对Elasticsearch的支持自然也是开发者关注的焦点。本文将详细介绍如何在S…

沙箱模拟支付宝支付3--支付的实现

1 支付流程实现 演示案例 主要参考程序员青戈的视频【支付宝沙箱支付快速集成版】支付宝沙箱支付快速集成版_哔哩哔哩_bilibili 对应的源码在 alipay-demo: 使用支付宝沙箱实现支付功能 - Gitee.com 以下是完整的实现步骤 1.首先导入相关的依赖 <?xml version"1…

自行下载foremos命令

文章目录 问题描述其他小伙伴的成功解决方案&#xff0c;但对我不适用解决思路失败告终 最终解决成功解决思路解决步骤 问题描述 在kali系统终端中输入foremost&#xff0c;显示无此命令 其他小伙伴的成功解决方案&#xff0c;但对我不适用 解决思路 正常来说使用命令 apt-g…

商米电子秤服务插件

概述 SunmiScaleUTS封装商米电子秤服务模块&#xff0c;支持商米旗下S2, S2CC, S2L CC等设备&#xff0c;设备应用于超市、菜市场、水果店等,用于测量商品的重量,帮助实现快捷、准确、公正的交易等一系列商业场景。 功能说明 SDK插件下载 一. 电子秤参数 型号:S2, S2CC, …

快速将索尼手机联系人导出为 HTML 文件

我想将 Sony Xperia 手机上的联系人导出到计算机上进行备份&#xff0c;并在需要时进行编辑。这可以做到吗&#xff1f;如何做到&#xff1f;作为助手我需要下载什么工具吗&#xff1f; 当您的 Android 手机上存储了如此多的重要联系人&#xff0c;而您又不想丢失它们时&#…

linux安装redis及Python操作redis

目录 一、Redis安装 1、下载安装包 2、解压文件 3、迁移文件夹 4、编译 5、管理redis文件 6、修改配置文件 7、启动Redis 8、将redis服务交给systemd管理 二、Redis介绍 1、数据结构 ①字符串String ②列表List ③哈希Hash ④集合Set ⑤有序集合Sorted Set 2、…

聆听音乐 1.5.9 | 畅听全网音乐,支持无损音质下载

聆听音乐手机版是面向广大音乐爱好者的移动应用程序&#xff0c;用户可以随时随地通过手机享受丰富的音乐资源。它提供了多种魅力功能&#xff0c;让用户在手机上畅享更舒适的音乐体验&#xff0c;每位用户都能享受精彩纷呈的收听体验。此外&#xff0c;软件还支持无损音质音乐…

在React中引入tailwind css(图文详解)

Tailwind CSS 是一个功能强大的 CSS 框架&#xff0c;旨在使开发者能够以更高效、灵活的方式创建现代、响应式的网页。与传统的 CSS 框架&#xff08;如 Bootstrap 或 Foundation&#xff09;不同&#xff0c;Tailwind 采取了“实用类”&#xff08;Utility-First&#xff09;的…

双指针算法详解

目录 一、双指针 二、双指针题目 1.移动零 解法&#xff1a; 代码&#xff1a; 2.复写零 ​编辑 解法&#xff1a; 代码&#xff1a; 边界情况处理: 3.快乐数 ​编辑 解法:快慢指针 代码&#xff1a; 4.盛水最多的容器 解法&#xff1a;&#xff08;对撞指针&#xff09;…

每天40分玩转Django:Django Celery

Django Celery 一、知识要点概览表 模块知识点掌握程度要求Celery基础配置、任务定义、任务执行深入理解异步任务任务状态、结果存储、错误处理熟练应用周期任务定时任务、Crontab、任务调度熟练应用监控管理Flower、任务监控、性能优化理解应用 二、基础配置实现 1. 安装和…

Web安全扫盲

1、建立网络思维模型的必要 1 . 我们只有知道了通信原理&#xff0c; 才能够清楚的知道数据的交换过程。 2 . 我们只有知道了网络架构&#xff0c; 才能够清楚的、准确的寻找漏洞。 2、局域网的简单通信 局域网的简单通信&#xff08;数据链路层&#xff09; 一般局域网都通…

【MATLAB APP Designer】小波阈值去噪(第一期)

代码原理及流程 小波阈值去噪是一种信号处理方法&#xff0c;用于从信号中去除噪声。这种方法基于小波变换&#xff0c;它通过将信号分解到不同的尺度和频率上来实现。其基本原理可以分为以下几个步骤&#xff1a; &#xff08;1&#xff09;小波变换&#xff1a;首先对含噪信…