首页 > 其他分享 >Pandas 分组聚合操作详解

Pandas 分组聚合操作详解

时间:2023-11-15 21:26:47浏览次数:31  
标签:聚合 sum df1 groupby 详解 分组 print Pandas

Pandas 是 Python 中用于数据分析的重要工具,它提供了丰富的数据操作方法。在数据分析过程中,经常需要对数据进行分组聚合操作。本文将介绍 Pandas 中的数据分组方法以及不同的聚合操作,并结合代码示例进行说明。

完整Excel数据

读取数据并进行简单分组

首先,我们通过 Pandas 读取 Excel 文件,并使用单个列进行分组,并应用聚合函数。示例代码如下:

df1 = pd.read_excel('C:\\Users\\liuchunlin2\\Desktop\\数据1.xlsx')
df = df1.groupby('店铺名称', as_index=False).sum()
print(df)

多列分组及聚合函数应用

接着,我们演示了如何使用多个列进行分组,并应用聚合函数:

df2 = df1.groupby(['店铺名称','订单号'], as_index=False).sum()
print(df2)

自定义聚合函数的应用

在这个示例中,我们定义了一个自定义聚合函数 custom_agg,并将其应用在分组聚合操作中:

def custom_agg(x):
    return x.max() - x.min()

result = df1.groupby('店铺名称', as_index=False)['销售数量'].agg(custom_agg)
print(result)

同时应用多个聚合函数

我们还可以同时应用多个聚合函数,示例如下:

df3 = df1.groupby('店铺名称', as_index=False).agg({'销售数量': 'sum', '销售金额': 'mean'})
print(df3)

迭代分组

Pandas 支持迭代分组的操作,通过以下示例可以看到迭代分组的效果:

for group, data in df1.groupby('店铺名称'):
    print(group)  # 分组的键值
    print(data)  # 所有属于该分组的数据

条件过滤

根据条件过滤分组:

df4 = df1.groupby('店铺名称').filter(lambda x: x['销售金额'].sum() > 300)
print(df4)

转换分组及分组排序

最后,我们演示了分组数据的转换以及分组排序的操作:

df1['NewColumn'] = df1.groupby('店铺名称')['销售数量'].transform(lambda x:x.sum())
print(df1)

排序

df5 = df1.groupby('店铺名称').sum().sort_values('销售数量', ascending=True)
print(df5)

以上就是关于 Pandas 分组聚合操作的详细介绍,通过这些示例代码和解释,相信读者对 Pandas 中的分组聚合操作有了更深入的理解。

总结:在数据分析中,对数据进行分组聚合是一项常见且重要的操作,Pandas 提供了丰富的功能来实现这一目的,包括单列分组、多列分组、自定义聚合函数、迭代分组、数据导出、条件过滤、分组转换以及分组排序等操作,能够满足大部分数据分析需求。

完整代码

import pandas as pd
import numpy as np

# 读取两个 Excel 文件
df1 = pd.read_excel('C:\\Users\\liuchunlin2\\Desktop\\数据1.xlsx')

#使用单个列进行分组,并应用聚合函数
df=df1.groupby('店铺名称', as_index=False).sum()
#df=df1.groupby('店铺名称', as_index=False).aggregate({'销售数量': 'sum'})
print(df)

#使用多个列进行分组,并应用聚合函数:
df2=df1.groupby(['店铺名称','订单号'], as_index=False).sum()
print(df2)

# 定义自定义聚合函数
def custom_agg(x):
    return x.max() - x.min()
# 使用自定义聚合函数对 'Column2' 进行聚合
result = df1.groupby('店铺名称', as_index=False)['销售数量'].agg(custom_agg)
print(result)

# 同时应用多个聚合函数
df3=df1.groupby('店铺名称', as_index=False).agg({'销售数量': 'sum', '销售金额': 'mean'})
print(df3)

# 迭代分组
for group, data in df1.groupby('店铺名称'):
    print(group)  # 分组的键值
    print(data)  # 所有属于该分组的数据

df3.to_excel('merged.xlsx', index=False)
print('这是一条数据分割线')

#根据条件过滤分组
df4=df1.groupby('店铺名称').filter(lambda x: x['销售金额'].sum() > 300)
print(df4)

#转换分组
df1['NewColumn'] = df1.groupby('店铺名称')['销售数量'].transform(lambda x:x.sum())  # 对 'Column2' 在每个分组内进行转换操作
#df=df1.groupby('店铺名称', as_index=False)['销售数量'].transform('sum')
print(df1)

#分组排序
df5=df1.groupby('店铺名称').sum().sort_values('销售数量', ascending=True)  # ascending=True 升序 ascending=False 降序
print(df5)

 

标签:聚合,sum,df1,groupby,详解,分组,print,Pandas
From: https://www.cnblogs.com/lcl-cn/p/17834793.html

相关文章

  • python初学者学习笔记-第十章-pandas
    Chapter10/pandas10.1dataframe简介dataframe是pandas中最基础的数据结构,当然它也是pandas中最常见的对象,它跟表格类似。dataframe的行和列是分别存储的数据集;这种存储方式,加快了列和行的操作效率。10.1.1创建dataframe一般情况下,可以通过列表和字典这些类型的数据源来创建......
  • Java之继承的详解一
     3.1概述3.1.1引入假如我们要定义如下类:学生类,老师类和工人类,分析如下。学生类属性:姓名,年龄行为:吃饭,睡觉老师类属性:姓名,年龄,薪水行为:吃饭,睡觉,教书班主任属性:姓名,年龄,薪水行为:吃饭,睡觉,管理如果我们定义了这三个类去开发一个系统,那么这三个类中就存在大量重......
  • 正则表达式中的小括号"()"。是代表分组的意思。 如果再其后面出现\1则是代表与第一个
    以下代码的执行后,str的值是:varstr="Helllloworld";str=str.replace(/(l)\1/g,'$1');AHeloworldBHelloworldCHellloworldDHelllloworld正确答案:B对于正则表达式/(l)\1/g,其中(l)是第一个分组,\1指向第一个分组,即\1重复了第一个分组的内容,所以该正则表达式......
  • mysql 人大金仓 按照日 周 月 年 分组查询
    查询每天的数据myslq:SELECTCOUNT(1)AStotal,DATE_FORMAT(created_time,'%Y-%m-%d')ASdaysFROMtable_testGROUPBYdays;金仓:SELECTCOUNT(1)AStotal,to_char(created_time,'%Y-%m-%d')ASdaysFROMtable_testGROUPBYdays;查询每周的数据mys......
  • Linux I/O重定向与管道详解
    原理
在Linux中,I/O重定向是通过重定向符号实现的。标准输入重定向使用符号“<”,标准输出重定向使用符号“>”。
例如,将文件file.txt的内容输出到终端,可以使用以下命令:catfile.txt将文件file.txt的内容输出到文件output.txt,可以使用以下命令:catfile.txt>output.txt管......
  • SpringBean生命周期之PostConstruct、PreDestroy详解
    @PostConstruct less复制代码@Documented@Retention(RUNTIME)@Target(METHOD)public@interfacePostConstruct{}该注解只能作用于方法上,执行依赖注入后执行任何初始化操作。必须在类投入服务之前调用此方法。应用PostConstruct的方法可以是公共的、受保护的......
  • Lombok使用详解
    https://blog.csdn.net/u010695794/article/details/70441432?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170003157816800215083138%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170003157816800215083138&biz_id=0&......
  • 软件测试|详解 Pytest 参数化:简化测试用例的编写
    简介Pytest是一个广泛使用的Python测试框架,它提供了丰富的功能来编写和执行测试用例。其中一个强大的特性是参数化,它允许我们通过一种简洁的方式运行多个输入参数的相似测试用例,从而减少冗余的代码。本文将详细介绍Pytest的参数化功能以及如何使用它来简化测试用例的编写。......
  • Linux文件管理详解
    Linux文件系统的体系结构
Linux文件系统采用层次结构,从根目录(/)开始,包含多个子目录和文件。文件系统之间通过虚拟文件系统(VFS)进行通信,VFS使得Linux可以支持多个不同的文件系统,每个表示一个VFS的通用接口。Linux文件系统组成
Linux文件系统主要由以下几部分组成:1. 文件:文件是存......
  • 软件测试|MySQL HAVING分组筛选详解
    简介在MySQL数据库中,HAVING子句用于在使用GROUPBY子句对结果进行分组后,对分组后的数据进行筛选和过滤。它允许我们对分组后的结果应用聚合函数,并基于聚合函数的结果进行条件过滤,从而得到我们需要的最终结果集。本文将详细介绍HAVING子句的用法,并提供一些实际示例以帮助大......