Pandas_groupby_aggregation

embedded/2024/12/22 15:28:16/

在Pandas中,groupby方法经常与agg方法结合使用,以对分组后的数据应用聚合函数。

我的写法

python">grouped = df.groupby('year')['value'].mean().reset_index()

reset_index 是为了把它转换成dataframe。中括号里的是要算聚合mean的一列。
这相当于SQL的:

SELECT year, AVG(value)
FROM df
GROUP BY year

还可以给聚合的列取名字

python">grouped = df.groupby('year').agg(avg_col = pd.NamedAgg(column="value", aggfunc="mean")).reset_index()

相当于SQL的:

SELECT year, AVG(value) AS avg_col
FROM df
GROUP BY year

groupby() 括号里可以写几个列:

python">grouped = df.groupby(['city', 'street']).agg(bank_count = pd.NamedAgg(column='bank_id', aggfunc='count'), avg_score = pd.NamedAgg(column='score', aggfunc='mean')).reset_index()

其它讲解

基本语法

grouped = df.groupby('grouping_column')
result = grouped.agg(aggregation_functions)

• df:你的DataFrame对象。
• grouping_column:用于分组的列名。
• aggregation_functions:一个或多个聚合函数,可以是Pandas内置的函数,如sum、mean、count等,也可以是自定义的函数。
示例
假设你有一个名为df的DataFrame,包含员工的部门和工资信息,你想计算每个部门的平均工资:

python">import pandas as pd
data = {'department': ['A', 'B', 'A', 'B', 'C', 'A', 'B', 'C'],'salary': [50000, 60000, 52000, 61000, 55000, 51000, 62000, 56000]
}
df = pd.DataFrame(data)# 使用groupby和agg计算每个部门的平均工资
result = df.groupby('department')['salary'].agg('mean')
print(result)

这将输出:
department
A 51400
B 60900
C 55500
Name: salary, dtype: int64

使用多个聚合函数
你可以在agg方法中传递一个函数列表,对每个分组应用多个聚合函数:

python">result = df.groupby('department')['salary'].agg(['mean', 'sum', 'count', 'max'])
print(result)

这将输出每个部门的工资的平均值、总和、计数和最大值。

使用自定义函数
你也可以在agg方法中使用自定义函数:

python">def custom_mean(x):return x.mean()result = df.groupby('department')['salary'].agg(custom_mean)
print(result)

这将计算每个部门的平均工资,和直接使用内置的mean函数效果相同。
使用多个列和多个聚合函数

python">result = df.groupby('department').agg({'salary': ['mean', 'sum', 'max'],'other_column': ['min', 'count']
})
print(result)
python">#创建df
data = {"A": [1, 1, 2, 2],
"B": [1, 2, 3, 4],
"C": [0.362838, 0.227877, 1.267767, -0.562860]}
df = pd.DataFrame(data)

df
A B C
0 1 1 0.362838
1 1 2 0.227877
2 2 3 1.267767
3 2 4 -0.562860

只按B列聚合

python">df.groupby('A').B.agg(['min', 'max'])

输出
min max
A
1 1 2
2 3 4

多个列,多个聚合函数,并重命名

python">df.groupby("A").agg(b_min=pd.NamedAgg(column="B", aggfunc="min"),c_sum=pd.NamedAgg(column="C", aggfunc="sum")
)

输出
b_min c_sum
A
1 1 0.590715
2 3 0.704907

使用lambda函数

python">df.groupby("A")[["B"]].agg(lambda x: x.astype(float).min())
  B

A
1 1.0
2 3.0

python">df.groupby('A').agg({'B': ['min', 'max'], 'C': 'sum'})
B             C

min max sum
A
1 1 2 0.590715
2 3 4 0.704907

pandas agg 官网:
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.core.groupby.DataFrameGroupBy.aggregate.html


http://www.ppmy.cn/embedded/115755.html

相关文章

Flyway 与 Gradle/Maven 集成

Flyway 是一个用于数据库版本控制和迁移的工具,可以通过 SQL 脚本自动化管理数据库结构的变更。为了将 Flyway 更好地融入开发流程,Flyway 可以与 Gradle 或 Maven 构建工具集成,使数据库迁移变得更为高效和自动化。 一、Flyway 与 Gradle 集…

简单多状态dp第三弹 leetcode -买卖股票的最佳时机问题

309. 买卖股票的最佳时机含冷冻期 买卖股票的最佳时机含冷冻期 分析: 使用动态规划解决 状态表示: 由于有「买入」「可交易」「冷冻期」三个状态,因此我们可以选择用三个数组,其中: ▪ dp[i][0] 表示:第 i 天结束后&#xff0c…

什么时候用synchronized,什么时候用Reentrantlock

文章目录 使用 synchronized 的场景使用 ReentrantLock 的场景综合考虑 使用 synchronized 的场景 synchronized 是 Java 内置的同步机制,使用起来比较简单且常用于如下场景: 1、简单的同步逻辑:当你的同步逻辑非常简单,比如只需…

《nmap 命令全解析:网络探测与安全扫描的利器》

文章目录 一、引言二、nmap 命令概述三、nmap 基本用法(一)安装 nmap(二)简单扫描示例 四、nmap 常见参数(一)-sS(TCP SYN 扫描)(二)-sT(TCP 连接…

卷积神经网络(Convolutional Neural Network,CNN)

CNN网络主要有三部分构成:卷积层、池化层和全连接层构成,其中卷积层负责提取图像中的局部特征;池化层用来大幅降低参数量级(降维);全连接层类似神经网络的部分,用来输出想要的结果。 卷积思想 卷积Convolution&#x…

WebGL入门(一)绘制一个点

源码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><scr…

nano-graphrag代码详解

1.概述 https://github.com/gusye1234/nano-graphrag &#x1f62d; GraphRAG很强大&#xff0c;但官方的实现阅读或修改起来非常困难。 &#x1f60a; 本项目提供了一个更小、更快、更简洁的 GraphRAG&#xff0c;同时保留了核心功能。 以下是该项目的详细代码注释&#x…

演示:基于WPF的DrawingVisual开发的Chart图表和表格绘制

一、目的&#xff1a;基于WPF的DrawingVisual开发的Chart图表和表格绘制 二、预览 钻井井轨迹表格数据演示示例&#xff08;应用Table布局&#xff0c;模拟井轨迹深度的绘制&#xff09; 饼图表格数据演示示例&#xff08;应用Table布局&#xff0c;模拟多个饼状图组合显示&am…