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

【Pandas】pandas DataFrame agg

Pandas2.2 DataFrame

Function application, GroupBy & window

方法描述
DataFrame.apply(func[, axis, raw, …])用于沿 DataFrame 的轴(行或列)应用一个函数
DataFrame.map(func[, na_action])用于对 DataFrame 的每个元素应用一个函数
DataFrame.applymap(func[, na_action])用于对 DataFrame 中的每一个元素应用一个函数
DataFrame.pipe(func, *args, **kwargs)用于实现链式编程风格的方法
DataFrame.agg([func, axis])用于对 DataFrame 的数据进行聚合操作
DataFrame.aggregate([func, axis])用于对 DataFrame 进行聚合操作的方法
DataFrame.transform(func[, axis])用于对 DataFrame 的列或行应用函数
DataFrame.groupby([by, axis, level, …])用于进行分组操作的核心方法

pandas.DataFrame.groupby()

pandas.DataFrame.groupby() 是 Pandas 中用于进行分组操作的核心方法。它允许你根据一个或多个列的值将数据分成不同的组,然后对每个组应用聚合、转换或过滤等操作。


一、方法签名
DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, observed=<no_default>, dropna=True)

二、参数说明
参数类型描述
bymapping, function, label, or list of labels分组依据。可以是列名、函数(用于处理索引)、字典映射、Series 或列表(多列分组)。
axisint or str, default: 0沿哪个轴分组:0 表示按行分组(默认),1 表示按列分组。
levelint or str, optional如果轴是 MultiIndex,则按指定层级分组。
as_indexbool, default: True是否将分组键作为结果的索引(仅在聚合时有效)。
sortbool, default: True是否对分组键排序。
group_keysbool, default: True在使用 apply() 时是否添加分组键到结果中。
observedbool, default: False控制是否只显示观察到的类别(适用于分类变量分组)。
dropnabool, default: True是否排除包含 NaN 的分组键。

三、返回值
  • 返回一个 GroupBy 对象,支持链式调用:
    • .agg():聚合
    • .transform():变换
    • .filter():过滤
    • .apply():自定义函数

四、常用场景及示例
示例1:单列分组 + 聚合(.agg()
import pandas as pddf = pd.DataFrame({'Category': ['A', 'B', 'A', 'B'],'Sales': [100, 200, 150, 250]
})# 按 Category 分组并求和
result = df.groupby('Category').agg({'Sales': 'sum'})
print(result)
输出:
           Sales
Category       
A            250
B            450

示例2:多列分组 + 多种聚合函数
df = pd.DataFrame({'Region': ['North', 'South', 'North', 'South'],'Product': ['X', 'X', 'Y', 'Y'],'Sales': [100, 150, 200, 250],'Units': [10, 15, 20, 25]
})# 按 Region 和 Product 分组,分别对 Sales 和 Units 进行不同聚合
result = df.groupby(['Region', 'Product']).agg(Total_Sales=('Sales', 'sum'),Avg_Units=('Units', 'mean')
)
print(result)
输出:
                   Total_Sales  Avg_Units
Region  Product                         
North   X                  100       10.0Y                  200       20.0
South   X                  150       15.0Y                  250       25.0

示例3:使用 .transform() 进行标准化
# 计算每组内的平均值并广播回原 DataFrame
df['Avg_Sales_By_Region'] = df.groupby('Region')['Sales'].transform('mean')
print(df)
输出:
    Region Product  Sales  Units  Avg_Sales_By_Region
0    North       X    100     10              150.0
1    South       X    150     15              200.0
2    North       Y    200     20              150.0
3    South       Y    250     25              200.0

示例4:使用 .filter() 筛选特定组
# 只保留总销售额大于 300 的区域
filtered_df = df.groupby('Region').filter(lambda x: x['Sales'].sum() > 300)
print(filtered_df)
输出:
   Region Product  Sales  Units
1  South       X    150     15
3  South       Y    250     25

示例5:使用 .apply() 自定义操作
# 对每个组应用自定义函数(如标准化)
def normalize(group):group['Norm_Sales'] = group['Sales'] / group['Sales'].sum()return groupresult = df.groupby('Region').apply(normalize)
print(result)
输出:
   Region Product  Sales  Units  Norm_Sales
0   North       X    100     10    0.333333
2   North       Y    200     20    0.666667
1   South       X    150     15    0.375000
3   South       Y    250     25    0.625000

五、注意事项
  • 分组键类型:支持字符串、整数、日期、分类变量等。
  • 性能优化:对于大型数据集,建议关闭 group_keyssort 提升效率。
  • 缺失值处理:默认不包括含 NaN 的分组键,可通过 dropna=False 改变行为。
  • as_index:若为 False,则分组键不会成为索引,适合输出表格化结果。

六、总结
方法用途
.agg()对每个分组执行聚合操作(如 sum、mean)
.transform()对每个分组执行变换操作,返回与原数据相同长度的结果
.filter()根据条件筛选符合条件的组
.apply()对每个分组应用任意函数,灵活性最强

groupby() 是数据分析中最核心的操作之一,结合聚合、变换、过滤等功能,能实现复杂的数据分析任务。

http://www.xdnf.cn/news/4363.html

相关文章:

  • 优化算法 - intro
  • window 显示驱动开发-线程和同步级别为零级
  • Git仓库基本操作
  • Spark 的 Shuffle 机制:原理与源码详解
  • 内网im软件,支持企业云盘的协同办公软件推荐
  • 【ES】Elasticsearch字段映射冲突问题分析与解决
  • JAVA设计模式——(十二)原型模式(Prototype Pattern)
  • [ linux-系统 ] 常见指令2
  • 二、Hadoop狭义和广义的理解
  • STM32教程:串口USART通讯协议原理及分析(基于STM32F103C8T6最小系统板标准库开发)*详细教程*
  • AI Agent 入门指南:从 LLM 到智能体
  • 【能力比对】数据质量管理VS数据质量平台
  • python打卡day17
  • 并发设计模式实战系列(16):屏障(Barrier)
  • BIO(Blocking I/O)、NIO(Non-blocking I/O)和 AIO(Asynchronous I/O)
  • Super-vlan
  • 【上位机——MFC】绘图
  • 智能车载台如何成为工业4.0的智慧中枢?解码AORO V80技术革新
  • 某团小程序mtgsig,_token 生成逻辑分析
  • 音视频之H.265/HEVC编解码并处理
  • AUTOSAR图解==>AUTOSAR_SRS_EEPROMDriver
  • Kotlin-解构声明
  • Webpack 5 Module Federation 深度解析
  • 【网络编程】一、socket编程详解
  • 中达瑞和便携式高光谱相机:珠宝鉴定领域的“光谱之眼”
  • Python企业级MySQL数据库开发实战指南
  • Unity 游戏数量单位换算(K/M/B/T)
  • Transformer 与 LSTM 在时序回归中的实践与优化
  • Apache Doris 使用指南:从入门到生产实践
  • SpringCloud入门教程合集(1)-SpringCloud简介与Eureka+Feign实现服务注册中心、服务提供与服务消费