当前位置: 首页 > news >正文

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: aA  B
letter number      
a      1      1  52      2  6Group: bA  B
letter number      
b      1      3  72      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: XA  B   C
0  1  X  10
2  2  X  30
4  4  X  50Group: YA  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 值的组。
http://www.lryc.cn/news/515166.html

相关文章:

  • 组合模式——C++实现
  • 【开源监控工具】Uptime Kuma:几分钟设置实时监控你的网站性能
  • MATLAB画柱状图
  • stm32内部flash在线读写操作
  • SpringCloud源码分析-nacos与eureka
  • DCGAN模型详解
  • 单片机-蜂鸣器实验
  • SQL 分析函数与聚合函数的组合应用
  • 【项目】基于趋动云平台的Stable Diffusion开发
  • 游戏如何检测iOS越狱
  • 【AIGC-ChatGPT进阶提示词指令】AI美食助手的设计与实现:Lisp风格系统提示词分析
  • 库伦值自动化功耗测试工具
  • Javascript数据结构——图Graph
  • 搭建nginx文件服务器
  • Ubuntu Server安装谷歌浏览器
  • Vue项目结构推荐(复杂国际化项目与一般项目结构)
  • hive-sql 连续登录五天的用户
  • FPGA 4x4矩阵键盘 实现
  • ruoyi开发学习
  • MacBook_Xcode_Swift雨燕
  • ABAQUS三维Voronoi晶体几何建模
  • .Net加密与Java互通
  • MySQL 06 章——多表查询
  • 猴子吃桃.
  • 游戏引擎学习第72天
  • element-ui dialog 组件源码分享
  • unity开发之shader 管道介质流动特效
  • 人工智能之机器学习算法
  • Android布局layout的draw简洁clipPath实现圆角矩形布局,Kotlin
  • 信息系统常见的系统架构