4.4 使用分组聚合进行组内计算

这篇具有很好参考价值的文章主要介绍了4.4 使用分组聚合进行组内计算。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

4.4.1 使用groupby方法拆分数据

该方法提供的是分组聚合步骤中的拆分功能,能根据索引或字段对数据进行分组
DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs)

groupby方法的参数及其说明:

4.4 使用分组聚合进行组内计算
by参数的特别说明
如果传入的是一个函数则对索引进行计算并分组。
如果传入的是一个字典或者Series则字典或者Series的值用来做分组依据。
如果传入一个NumPy数组则数据的元素作为分组依据。
如果传入的是字符串或者字符串列表则使用这些字符串所代表的字段作为分组依据。

# 4.4 使用分组聚合进行组内计算
## 4.4.1使用groupby方法拆分数据
import pandas as pd
import numpy as np
data = pd.read_csv('E:/Input/ptest.csv')
# print(data.head(3))
datagroup = data[['id', 'counts', 'amounts']].groupby(by='id')
print(datagroup)  # 分组后的结果并不能直接查看,而是被存在内存中,输出的是内存地址。
# <pandas.core.groupby.generic.DataFrameGroupBy object at 0x0000020717BF0DF0>

4.4 使用分组聚合进行组内计算
用groupby方法分组后的结果并不能直接查看,而是被存在内存中,输出的是内存地址。实际上分组后的数据对象GroupBy类似Series与DataFrame,是pandas提供的一种对象。

groupby对象常用的描述性统计方法如下:

4.4 使用分组聚合进行组内计算

# 可以查看groupby对象常用的描述性统计方法
print(datagroup.count())  # 分组的数目,包括缺失值
print(datagroup.max())  # 每组最大值
print(datagroup.min())  # 每组最小值

4.4 使用分组聚合进行组内计算
4.4 使用分组聚合进行组内计算
4.4 使用分组聚合进行组内计算

4.4.2 使用agg方法聚合数据

agg,aggregate方法都支持对每个分组应用某函数,包括Python内置函数或自定义函数。同时这两个方法能够也能够直接对DataFrame进行函数应用操作。

 DataFrame.agg(func, axis=0, *args, **kwargs)
 DataFrame.aggregate(func, axis=0, *args, **kwargs)

agg函数和aggregate函数的参数说明

4.4 使用分组聚合进行组内计算
在正常使用过程中,agg函数和aggregate函数对DataFrame对象操作时功能几乎完全相同,因此只需要掌握其中一个函数即可。

1、使用agg求出当前数据对应的统计量

可以使用agg方法一次求出当前数据中所有菜品销量和售价的总和与均值,如detail[[‘counts’,‘amounts’]].agg([np.sum,np.mean]))。

## 使用agg方法一次求出所有销量和售价的总和与均值
print(data[['counts', 'amounts']].agg([np.sum, np.mean]))

2、使用agg分别求字段的不同统计量

对于某个字段希望只做求均值操作,而对另一个字段则希望只做求和操作,可以使用字典的方式,将两个字段名分别作为key,然后将NumPy库的求和与求均值的函数分别作为value,如detail.agg({‘counts’:np.sum,‘amounts’:np.mean}))。

## 对counts求和,对amounts求均值
print(data.agg({'counts': np.sum, 'amounts': np.mean}))

3、使用agg方法求不同字段的不同数目统计量

在某些时候还希望求出某个字段的多个统计量,某些字段则只需要求一个统计量,此时只需要将字典对应key的value变为列表,列表元素为多个目标的统计量即可,如detail.agg({‘counts’:np.sum,‘amounts’:[np.mean,np.sum]}))

## 求counts的总和,求amounts的均值和总和
print(data.agg({'counts': np.sum, 'amounts': [np.mean, np.sum]}))

4、在agg方法中使用自定义函数

在agg方法可传入自定义的函数。

## 自定义函数求两倍的和
def DoubleSum(data):
    s = data.sum() * 2
    return s
print(data.agg({'counts': DoubleSum}, axis = 0))

5、agg方法中使用的自定义函数含Numpy中的函数

使用自定义函数需要注意的是NumPy库中的函数np.mean,np.median,np.prod,np.sum,np.std,np.var能够在agg中直接使用,但是在自定义函数中使用NumPy库中的这些函数,如果计算的时候是单个序列则会无法得出想要的结果,如果是多列数据同时计算则不会出现这种问题。

## 自定义函数求两倍的和
def DoubleSum2(data):
    s = sum(data) * 2
    return s
print(data.agg({'counts': DoubleSum2}, axis = 0))
print(data[['counts', 'amounts']].agg(DoubleSum2))   #销量与售价的和的两倍

6、使用agg方法做简单的聚合

使用agg方法能够实现对每一个字段每一组使用相同的函数。

print('均值:', datagroup.agg(np.mean))
print('标准差:', datagroup.agg(np.std))

7、使用agg方法对分组数据使用不同的聚合函数

如果需要对不同的字段应用不同的函数,则可以和Dataframe中使用agg方法相同。

print(datagroup.agg({'counts':np.sum, 'amounts':np.mean}))

4.4.3使用apply方法聚合数据

apply方法类似agg方法能够将函数应用于每一列。不同之处在于apply方法相比agg方法传入的函数只能够作用于整个DataFrame或者Series,而无法像agg一样能够对不同字段,应用不同函数获取不同结果。
使用apply方法对GroupBy对象进行聚合操作其方法和agg方法也相同,只是使用agg方法能够实现对不同的字段进行应用不同的函数,而apply则不行。
DataFrame.apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), **kwds)

apply方法的常用参数及其说明

4.4 使用分组聚合进行组内计算

#  4.4.3使用apply方法聚合数据
### 1、apply方法的基本用法
## counts和amounts的均值
print(data[['counts', 'amounts']].apply(np.mean))
### 2、使用apply方法进行聚合操作
## 订单每组的均值
print(datagroup.apply(np.mean))
## 订单每组的标准差
print(datagroup.apply(np.std))

4.4.4 使用transform方法聚合数据

transform方法能够对整个DataFrame的所有元素进行操作。且transform方法只有一个参数“func”,表示对DataFrame操作的函数。
同时transform方法还能够对DataFrame分组后的对象GroupBy进行操作,可以实现组内离差标准化等操作。
若在计算离差标准化的时候结果中有NaN,这是由于根据离差标准化公式,最大值和最小值相同的情况下分母是0。而分母为0的数在Python中表示为NaN。

# 4.4.4 使用transform方法聚合数据
### 1、使用transform方法将销量和售价翻倍
print(data[['counts', 'amounts']].transform(lambda x: x*2))
### 2、使用transform实现组内离差标准化
print(datagroup.transform(lambda x: (x.mean()-x.min())/(x.max()-x.min())))

4.4.5 任务实现

# 4.4.5 任务实现
### 1、按照时间对菜单详情表进行拆分
detail = pd.read_csv('E:/Input/ptest.csv')
# 订单详情表按照日期分组
detail['time'] = pd.to_datetime(detail['time'])  # 转换成日期格式
detail['date'] = [i.date() for i in detail['time']]  # 提取日,增加一列date
# detail.to_csv('E:/Output/detail.csv', index=False)  # 输出
detailgroup = detail[['date', 'counts', 'amounts']].groupby(by='date')
print(detailgroup.size())
### 2、使用agg方法计算单日菜品销售的平均单价和售价中位数
print(detailgroup[['amounts']].agg([np.mean, np.median]))  # 合在一起
print(detailgroup.agg({'amounts': np.mean}))  # 分开
print(detailgroup.agg({'amounts': np.median}))
print("-----+++++++++++-----")
### 3、使用apply方法统计单日菜品销售的数目
print(detailgroup['counts'].apply(np.sum))

数据

链接:https://pan.baidu.com/s/1FPQFA8JJHuezxbpQIHiZ4Q
提取码:6666文章来源地址https://www.toymoban.com/news/detail-422707.html

完整代码

# 4.4 使用分组聚合进行组内计算
## 4.4.1使用groupby方法拆分数据
import pandas as pd
import numpy as np
data = pd.read_csv('E:/Input/ptest.csv')
# print(data.head(3))
datagroup = data[['id', 'counts', 'amounts']].groupby(by='id')
print(datagroup)  # 分组后的结果并不能直接查看,而是被存在内存中,输出的是内存地址。 
#<pandas.core.groupby.generic.DataFrameGroupBy object at 0x0000020717BF0DF0>

# 可以查看groupby对象常用的描述性统计方法
print(datagroup.count())  # 分组的数目,包括缺失值
print(datagroup.max())  # 每组最大值
print(datagroup.min())  # 每组最小值
print(datagroup.std())  # 每组标准差
print(datagroup.size())  # 每组的大小

print('-----------------')
# 4.4.2 使用agg方法聚合数据
### 1、使用agg求出当前数据对应的统计量
## 使用agg方法一次求出所有销量和售价的总和与均值
print(data[['counts', 'amounts']].agg([np.sum, np.mean]))
### 2、使用agg分别求字段的不同统计量
## 对counts求和,对amounts求均值
print(data.agg({'counts': np.sum, 'amounts': np.mean}))
### 3、使用agg方法求不同字段的不同数目统计量
## 求counts的总和,求amounts的均值和总和
print(data.agg({'counts': np.sum, 'amounts': [np.mean, np.sum]}))
### 4、在agg方法中使用自定义函数
## 自定义函数求两倍的和
def DoubleSum(data):
    s = data.sum() * 2
    return s
print(data.agg({'counts': DoubleSum}, axis = 0))

### 5、agg方法中使用的自定义函数含Numpy中的函数
## 自定义函数求两倍的和
def DoubleSum2(data):
    s = sum(data) * 2
    return s
print(data.agg({'counts': DoubleSum2}, axis = 0))
print(data[['counts', 'amounts']].agg(DoubleSum2))   #销量与售价的和的两倍
### 6、使用agg方法做简单的聚合
print('均值:', datagroup.agg(np.mean))
print('标准差:', datagroup.agg(np.std))
### 7、使用agg方法对分组数据使用不同的聚合函数
print(datagroup.agg({'counts':np.sum, 'amounts':np.mean}))

#  4.4.3使用apply方法聚合数据
### 1、apply方法的基本用法
print(data[['counts', 'amounts']].apply(np.mean))  ## counts和amounts的均值
### 2、使用apply方法进行聚合操作
# print(datagroup.apply(np.mean))  ## 订单每组的均值
print(datagroup.apply(np.std))  ## 订单每组的标准差

# 4.4.4 使用transform方法聚合数据
### 1、使用transform方法将销量和售价翻倍
print(data[['counts', 'amounts']].transform(lambda x: x*2))
### 2、使用transform实现组内离差标准化
print(datagroup.transform(lambda x: (x.mean()-x.min())/(x.max()-x.min())))

# 4.4.5 任务实现
### 1、按照时间对菜单详情表进行拆分
detail = pd.read_csv('E:/Input/ptest.csv')
# 订单详情表按照日期分组
detail['time'] = pd.to_datetime(detail['time'])  # 转换成日期格式
detail['date'] = [i.date() for i in detail['time']]  # 提取日,增加一列date
# detail.to_csv('E:/Output/detail.csv', index=False)  # 输出
detailgroup = detail[['date', 'counts', 'amounts']].groupby(by='date')
print(detailgroup.size())
### 2、使用agg方法计算单日菜品销售的平均单价和售价中位数
print(detailgroup[['amounts']].agg([np.mean, np.median]))  # 合在一起
print(detailgroup.agg({'amounts': np.mean}))  # 分开
print(detailgroup.agg({'amounts': np.median}))
print("-----+++++++++++-----")
### 3、使用apply方法统计单日菜品销售的数目
print(detailgroup['counts'].apply(np.sum))

到了这里,关于4.4 使用分组聚合进行组内计算的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ES 聚合分组查询 语法

    ES 聚合分组查询的语法如下: 其中 index 是索引名称, size 设置为 0 意味着只返回聚合结果而不返回文档。 aggs 字段是聚合查询的核心部分,这里以 group_by_field 为例进行分组查询,其中 terms 指定了分组的字段名称。 这样的查询会返回按照 field_name 字段进行分组后每个分组的

    2024年02月11日
    浏览(28)
  • 【MySQL】聚合函数与分组查询

    MySQL中的聚合函数用于对数据进行计算和统计,常见的聚合函数包括下面列举出来的聚合函数: 查看班级有多少同学 统计数学成绩有多少个 统计英语不及格的人数 查看数学成绩的总和 统计英语不及格的分数总和 统计不及格的英语的平均分不需要上面那么麻烦自己手动除:

    2024年02月14日
    浏览(32)
  • 数据分析 — Pandas 分组聚合

    pandas.apply() 是 Pandas 库中的一个函数,用于在 DataFrame 或 Series 上应用自定义函数。这个函数可以 沿着指定的轴(行或列)逐行或逐列地应用函数 ,从而实现对数据的定制化操作。 参数: func(必需):这是要应用的函数,可以是一个 Python 函数、lambda 函数或可调用对象。这

    2024年02月19日
    浏览(31)
  • elasticsearch中的聚合分组查询

    分组聚合及嵌套查询 聚合查询可以理解为SQL中的求和、求最大值、最小值以及求均值的需求 嵌套可以理解为es存值的某一个字段为对象属性的值做处理. Elasticsearch Java API分组与聚合结合 其中对字段field_one进行分组,分组的别名为fieldOne,取2^31-1组数据.如果不设置size,查询的结果

    2024年02月11日
    浏览(37)
  • Django ORM 聚合查询和分组查询

    阅读文本前请参考此文章的数据表结构 对QuerySet计算统计值,需要使用 aggregate 方法,提供的参数可以是一个或多个聚合函数 Django提供了一系列的聚合函数,其中 Avg (平均值)、 Count (计数)、 Max (最大值)、 Min (最小值)、 Sum (加和)最为常用 要使用这些聚合函数,

    2024年02月01日
    浏览(51)
  • pandas分组与聚合groupby()函数详解

    一、groupby分组与聚合 分组与聚合通常是分析数据的一种方式,通常与一些统计函数一起使用,查看数据的分组情况 DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=_NoDefault.no_default, squeeze=_NoDefault.no_default, observed=False, dropna=True) :使用映射器或按一Serie

    2024年02月14日
    浏览(33)
  • Springboot操作Elasticsearch——聚合分组与排序

    这两天项目中需要从es中查询数据,根据某个字段进行分组,求其最大、最小、平均值,并按最大值进行排序。 springboot的版本号:2.0.6.RELEASE Elasticsearch的版本号:5.6.3 主要代码记录下: BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery()                 .filter(QueryBuilders.termsQu

    2024年02月16日
    浏览(35)
  • Java Elasticsearch多条件分组聚合查询

    需求         在项目开发中,需要从elasticsearch中查询日志数据,先统计每一天的日志调用量,然后在每一天的分组聚合基础上,再分组聚合统计成功和失败的日志调用量。 代码

    2024年02月08日
    浏览(43)
  • 五、浅析[ElasticSearch]底层原理与分组聚合查询

    集群节点介绍 es配置文件夹中 客户端节点 当主节点和数据节点配置都设置为false的时候,该节点只能处理路由请求,处理搜索,分发索引操作等,从本质上来说该客户节点表现为智能负载平衡器。独立的客户端节点在一个比较大的集群中是非常有用的,他协调主节点和数据节

    2024年02月16日
    浏览(39)
  • Django基础入门⑫:Django 对象查询详解,分组聚合

    🏘️🏘️个人简介:以山河作礼。 🎖️🎖️: Python领域新星创作者,CSDN实力新星认证,阿里云社区专家博主,CSDN内容合伙人 🎁🎁:Web全栈开发专栏:《Web全栈开发》免费专栏,欢迎阅读! 🎁🎁: 文章末尾扫描二维码可以加入粉丝交流群,不定期免费送书。 F对象查询与

    2024年02月12日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包