python数据分析高阶应用技巧-pandas库聚合案例【 groupby().apply()写法强化】

python数据分析高阶应用技巧-pandas库聚合案例【 groupby().apply()写法强化】

文章目录

python数据分析高阶应用技巧-pandas库聚合案例【 groupby().apply()写法强化】

熟练掌握groupby().apply()写法,有助于将碎片化的数据处理、步骤代码整合起来,这对提高工作效率是大有裨益的。

python数据分析高阶应用技巧-pandas库聚合案例【 groupby().apply()写法强化】

; 1. 准备数据

首先准备一组代码生成的DataFrame数据,代码如下所示:

import pandas as pd

df = pd.DataFrame({'品种': list('AAAABBBCCD'),
                   '类型': list('abcdccdadd'),
                   '金额': [1, 2, 1, 3, 2, 1, 3, 2, 3, 1]
                   })

数据如下所示:

python数据分析高阶应用技巧-pandas库聚合案例【 groupby().apply()写法强化】

(如果您对DataFrame的apply()存在疑问,欢迎点击这篇博客学习:python数据分析apply(),map(),applymap()用法归纳。)

  1. 对DataFrame对象使用apply()

apply()方法有两个重要的参数,第一个参数是一个自定义的函数(下边用fun()表示),第二个参数则是axis参数。
axis参数为0表示对列操作,设置为1则表示对行操作。

因为是以函数为参数,所以我们在解决实际问题时,还有一个要考虑的因素就是,这个”函数参数”的参数x指代的是什么。(即fun(x)中的x)
这里对上边得到的df做一个简单的示例来说明,对列操作,打印出每个x:

df.apply(lambda x: print(x))

可以看到x即每一列与索引组成的Series对象。因为除了打印没有任何操作,最后返回的是一个Values为None的Series。

python数据分析高阶应用技巧-pandas库聚合案例【 groupby().apply()写法强化】

如果要求和,则结果显而易见地容易理解:

df.apply(lambda x: x.sum())

可以看到结果如下:

python数据分析高阶应用技巧-pandas库聚合案例【 groupby().apply()写法强化】
  1. 对groupby()聚合的结果使用apply()

对DataFrame对象使用apply(),每个x是一个Series;
对groupby()聚合的结果使用apply(),得到每个x则会是一个DataFrame。

这是我们首先需要知道的,知道了这一点,后边的逻辑才能清晰。对变量df的”品种”列进行聚合,然后使用apply()方法打印每个x如下:

import pandas as pd

df = pd.DataFrame({'品种': list('AAAABBBCCD'),
                   '类型': list('abcdccdadd'),
                   '金额': [1, 2, 1, 3, 2, 1, 3, 2, 3, 1]
                   })
df.groupby(['品种']).apply(lambda x: print(x))

x打印结果如下:

python数据分析高阶应用技巧-pandas库聚合案例【 groupby().apply()写法强化】
可以看到,每个x都是一个DataFrame,且是按照”品种”列划分为四类品种的。

如果fun()功能是求和,则实现了先聚合,后求和:

df.groupby(['品种']).apply(lambda x: x.sum())

python数据分析高阶应用技巧-pandas库聚合案例【 groupby().apply()写法强化】
这将不同于直接使用sum()方法:

对比结果以感受其差别

df.groupby(['品种']).sum()

python数据分析高阶应用技巧-pandas库聚合案例【 groupby().apply()写法强化】
  1. 案例分享

下边给出一个略微复杂些的案例,通过groupby()+apply()的方法,可以更快捷地实现。
生成数据的代码及数据如下:

import pandas as pd

df = pd.DataFrame({'品种': list('AAAABBBCCD'),
                   '类型': list('abcdccdadd'),
                   '金额': [1, 2, 1, 3, 2, 1, 3, 2, 3, 1]
                   })
df

python数据分析高阶应用技巧-pandas库聚合案例【 groupby().apply()写法强化】

需求:求出每个品种的合计金额,每个品种中类型为a,b,c(不包括d)的合计金额,以及每个品种中 类型为a,b,c(不包括d)的合计金额,占该品种合计金额的比例。输出一个DataFrame。

先定义一个fun()函数,使其与groupby().apply()组合,最后再对结果的索引列稍作优化即可。

def fun(s):
    b = s['金额'].sum()
    t = 0
    for key, value in s['类型'].items():
        if ((value == 'a') | (value == 'b') | (value == 'c')):
            t += s['金额'][key]
    return pd.DataFrame([(t, b, t / b)], columns=['属于abc类型的金额汇总', '按品种汇总金额', '占比'])

r = df.groupby(['品种']).apply(fun)
result = r.reset_index().drop(['level_1'],axis=1)

因为r是双列索引,稍作优化,result的最终结果:

python数据分析高阶应用技巧-pandas库聚合案例【 groupby().apply()写法强化】

本次分享就到这里,小啾感谢您的关注与支持!
🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ

Original: https://blog.csdn.net/weixin_48964486/article/details/127588129
Author: 侯小啾
Title: python数据分析高阶应用技巧-pandas库聚合案例【 groupby().apply()写法强化】

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/752416/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 搭建 Rails 开发环境

    就算对有经验的开发者来说,安装 Ruby、Rails,以及相关的软件,也要几经波折。 这些问题是由环境的多样性导致的,不同的操作系统、版本号、文本编辑器等,都会导致环境有所不同。 …

    Python 2023年11月7日
    033
  • 不就是Redis吗?竟让我一个月拿了8个offer,其中两家都是一线大厂

    啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

    Python 2023年10月7日
    054
  • 85行代码实现多线程+数据文件操作+数据库存储的爬虫实例

    写在前面 这是我在接触爬虫后,写的第二个爬虫实例。也是我在学习python后真正意义上写的第二个小项目,第一个小项目就是第一个爬虫了。 我从学习python到现在,也就三个星期不到…

    Python 2023年11月2日
    038
  • Python使用tesserocr识别文字过程中遇到的一个问题

    最近在使用Python识别PNG图像中包含的文字时遇到一个问题。解决过程记录如下。 (Python使用tesserocr的安装过程不再描述。) 在使用tesserocr识别PNG图…

    Python 2023年6月9日
    052
  • [Pandas] 按轴标签.loc VS 按数字索引.iloc

    美图欣赏2022/06/24 iloc和loc的区别1.loc是基于索引值的,切片是左闭右闭的2.iloc是基于位置的,切片是左闭右开的 1.按轴标签.loc .loc的格式是df…

    Python 2023年8月22日
    071
  • python 循环总结

    Python 循环 Python 有两个循环命令: while 循环 for 循环 一、while 循环 使用 while 循环,只要条件为真,我们就可以执行一组语句。 i=0 w…

    Python 2023年8月1日
    0100
  • 【算法分析与设计】【期中(末)复习题】【2022秋】

    文章目录 一. 单选题 二. 填空题 三. 判断题 四. 多选题 一. 单选题 1.按照渐近阶从低到高的顺序排列下列表达式: 30n,2logn,4,n! A. 4 Origina…

    Python 2023年8月9日
    050
  • Numpy 100道练习题+常用知识点

    import numpy as np 打印numpy配置 np.show_config np.show_config 数组大小、元素个数、元素比特数 Z = np.zeros((3…

    Python 2023年8月24日
    078
  • Scrapy + selenium + 超级鹰验证码识别爬取网站

    目录 一、安装Scrapy 二、Scrapy项目生成 三、爬取某个网站(以下我用之前的创建的项目,不是刚刚新创的) 一、安装Scrapy 1,window安装 pip instal…

    Python 2023年10月1日
    048
  • 趁这个软件还没倒闭,我连夜用Python下载了所有壁纸…

    import requests import re Python学习交流群 708525271 更多案例获取 for page in range(1, 11): url = f’h…

    Python 2023年10月31日
    036
  • spss分析方法-聚类分析

    聚类分析是根据研究对象的特征,按照一定标准对研究对象进行分类的一种分析方法。下面我们主要从下面四个方面来解说: 实际应用 理论思想 建立模型 *分析结果 一、实际应用 聚类分析的目…

    Python 2023年10月11日
    040
  • python打开文件

    open():open(file, mode=’r’, buffering=- 1, encoding=None, errors=None, newline…

    Python 2023年8月2日
    069
  • Scrapy入门

    目录 前言 一、Scrapy是什么? 二、架构图 三、安装 四、使用scrapy 1.创建scrapy项目 2.新建一个爬虫程序 3.运行爬虫程序 前言 本教程适用于有python…

    Python 2023年10月3日
    057
  • 基于Python深度图生成3D点云

    文章目录 前言 二维RGB图像 成像原理 数据准备 图片加载 算法实现 生成点云 点云显示 完整代码 总结 前言 废话不多说,直接开造。这里的话我们有两个目标,第一个是如何把一个2…

    Python 2023年8月1日
    050
  • 如何用Pandas读取一个csv文件

    一,csv文件 csv文件是什么?csv文件是一个文件类型。这种文件不像excel,word,ppt……这些文件一样,它们的区别就在于,如果你用MacOs(…

    Python 2023年8月2日
    066
  • Vue入门七:前端工程化(前端模块化)

    1、模快化相关规范*** (1)模块化概述 传统开发模式的主要问题:命名冲突,文件依赖。 通过模块化解决上述问题:模块化就是把单独的一个功能封装到一个模块(文件)中,模块直接互相隔…

    Python 2023年6月10日
    085
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球