pandas合并groupby_pandas实践之GroupBy()

21084bb7b7cb67e45a123ac8b9b14ba6.png


官网地址:https://pandas.pydata.org/docs/reference/groupby.html

pandas中对数据进行分组操作的方法,官方有很详细的教程。下面的案例是真实遇到的问题,看一看用pandas是如何解决的。


2c2b426d758bb8ad27222b3292af739f.png构造数据
import pandas as pdimport numpy as npdf = pd.DataFrame(data={    "boss":["A"]*3+["B"]*3+["C"]*4,    "owner":["A1","A1","A2","B1","B2","B2","C1","C1","C2","C2"],    "month":[1,2,1,1,1,2,1,2,1,2],    "fk_money":[10,20,30,40,50,60,70,80,90,100],})

2c2b426d758bb8ad27222b3292af739f.png数据展示
bossownermonthfk_money
0AA1110
1AA1220
2AA2130
3BB1140
4BB2150
5‍‍BB2260
6CC1170
7CC1280
8CC2190
9CC22100

解释:比如第一条数据,老板A手下的业务员A1,在第1个月的放款金额为10万。


2c2b426d758bb8ad27222b3292af739f.png问题一、老板手下的业务员在哪个月的放款金额最多?

解决思路:

  • 按照owner分组,降序排列,取第一个数据
result1_df = df.sort_values(by="fk_money",ascending=False).groupby(by="owner").head(1)result1_df
bossownermonthfk_money
9CC22100
7CC1280
5BB2260
3BB1140
2AA2130
1AA1220

解释:老板C手下的业务员C2在第2个月的放款金额最大为100万。

拓展:如何取第二大的数据?

  • GroupBy.nth(),取每一组第n行的数据,n从0开始,0代表第一行。

  • 没有第n行的时候,不取。
result1_df = df.sort_values(by="fk_money",ascending=False).groupby(by="owner",as_index=False).nth(1)result1_df
ownerbossmonthfk_money
A1A110
B1B150
C1C170
C2C190
2c2b426d758bb8ad27222b3292af739f.png问题二、业务员每月放款金额占比情况?

解决思路:

  1. 计算出每个业务员总的放款金额owner_total_fk_money

  2. 将df与计算好的owner_total_fk_money合并

  3. fk_money除以owner_total_fk_money得到需要的数据

### 代码实现:owner_total_fk_money = df.groupby(by="owner",as_index=False).agg({"fk_money":"sum"})
result1_df = pd.merge(df,owner_total_fk_money,on="owner",how="left",suffixes=("","_total"))
result1_df["rate"] = (result1_df["fk_money"]/result1_df["fk_money_total"]).map(lambda x:"{:.2%}".format(x))result1_df
bossownermonthfk_moneyfk_money_totalrate
0AA11103033.33%
1AA12203066.67%
2AA213030100.00%
3BB114040100.00%
4BB215011045.45%
5BB226011054.55%
6CC117015046.67%
7CC128015053.33%
8CC219019047.37%
9CC2210019052.63%
解释:A1业务员在第一个月放款10万,占其总放款(30万)比例为33.33%,第二个月放款20万,占比为66.67%
2c2b426d758bb8ad27222b3292af739f.png问题三、每个老板手下业务员放款占比?

解决思路:

  1. 需要知道每个老板总的放款金额,boss_df

  2. 需要知道每个业务员的放款金额,owner_df

  3. 按照boss字段合并boss_df和owner_df

  4. 业务员的放款金额除以每个老板总的放款金额

# 计算每一个boss的总fk_moneyboss_df = df.groupby(by="boss",as_index=False).agg({"fk_money":"sum"})
# 计算每一个owner的总fk_moneyowner_df = df.groupby(by=["boss","owner"],as_index=False).agg({"fk_money":"sum"})
# 合并owner_df和boss_dfresult2_df = pd.merge(owner_df,boss_df,on="boss",how="left",suffixes=("_owner","_boss"))
result2_df["占比"] = (result_df["fk_money_owner"]/result_df["fk_money_boss"]).map(lambda x:"{:.2%}".format(x)result2_df
bossownerfk_money_ownerfk_money_bossreate
0AA1306050.00%
1AA2306050.00%
2BB14015026.67%
3BB211015073.33%
4CC115034044.12%
5CC219034055.88%

解释:老板A手下的A1占总放款金额(60万)比例为50%。

----END----

78caab2377e580957334773cfc673be2.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259794.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

erdas遥感图像几何校正_定量/高光谱遥感之—光谱分析技术

文章转载自微信公众号CSDN,作者冰清-小魔鱼,版权归原作者及刊载媒体所有。在定量遥感或者高光谱遥感中,信息提取主要用到光谱/波谱分析技术。本专题对光谱/波谱分析中涉及的流程及一些技术进行讲解,包括以下内容:基本概…

Zipkin-1.19.0学习系列1:java范例

2019独角兽企业重金招聘Python工程师标准>>> 官网地址: https://github.com/openzipkin/zipkin http://zipkin.io/ https://www.oschina.net/p/zipkin 截止到2017/1/4为止,最新版本为: Zipkin 1.19 下载地址: https://github.com/openzipkin/zipkin/arc…

PageRank算法

1. PageRank算法概述 PageRank,即网页排名,又称网页级别、Google左側排名或佩奇排名。 是Google创始人拉里佩奇和谢尔盖布林于1997年构建早期的搜索系统原型时提出的链接分析算法,自从Google在商业上获得空前的成功后,该算法也成为其他搜索引…

linux中_在 Linux 桌面中开始使用 Lumina | Linux 中国

本文是 24 天 Linux 桌面特别系列的一部分。Lumina 桌面是让你使用快速、合理的基于 Fluxbox 桌面的捷径,它具有你无法缺少的所有功能。-- Seth Kenlon多年来,有一个名为 PC-BSD 的基于 FreeBSD 的桌面操作系统(OS)。它旨在作为一个常规使用的系统&#…

hdu 2612 Find a way (广搜)

Problem DescriptionPass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Ningbo one year, yifenfei have many people to meet. Especially a good friend Merceki.Yifenfei’s home is at the countryside, but Merceki’s home is in t…

正则表达式里转义字符_五分钟搞定正则表达式,如果没搞定,再加两分钟

五分钟搞定正则表达式,如果没搞定,再加两分钟【这是 ZY 第 18 篇原创文章】 文章概览一、正则表达式介绍正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE&#xf…

百度富文本编辑器,改变图片上传存储路径

我用的是最新版! 找到以下2个关键文件: YourPath.../Ueditor/php/config.json YourPath.../Ueditor/php/Uploader.class.php config.json找到如下代码: "imagePathFormat": "...(这里不用管)",//找到imagePathFormat所在…

如何手动给Docker容器设置静态IP

2019独角兽企业重金招聘Python工程师标准>>> 要点: 1.首先需要在宿主机上虚拟出来一个真实可用桥接网卡比如br0 2.docker启动的时候默认使用br0进行桥接网络 3.创建docker容器的时候使用--netnone模式 4.手动为每个创建的容器生成静态ip。但是ip每次在重…

的函数原型_JS基础函数、对象和原型、原型链的关系

JS的原型、原型链一直是比较难理解的内容,不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,更多的"很可能"是一知半解,而这部分内容又是JS的核心内容,想要技术进阶的话肯定不能对这个概念一知半解,碰到…

python字符串基本操作

直接上图: ispace()是否为空格 isupper()与islower是否为大写或小写 isdigit是否为数字 isalpha是否为字母 isalnum()是否为字母与数字混合体 startswith()与endswith()判断是否以什么开始,以什么结尾转载于:https://www.cnblogs.com/bestSmile/p/405550…

迁移学习自我学习

最近在看Ng的深度学习教程,看到self-taught learning的时候,对一些概念感到很陌生。作为还清技术债的一个环节,用半个下午的时间简单搜了下几个名词,以后如果会用到的话再深入去看。 监督学习在前一篇博客中讨论过了,这…

MTV: Django眼中的MVC

URLconfMTV:Django眼中的MVC MVC是众所周知的模式,即:将应用程序分解成三个组成部分:model(模型),view(视图),和 controller(控制 器)。其中:M 管理应用程序的状态(通常存储到数据库中),并约束改…

createbitmap导致的内存泄漏如何处理_C++ 如何避免内存泄漏,一篇就够

前言近年来,讨论 C 的人越来越少了,一方面是由于像 Python,Go 等优秀的语言的流行,另一方面,大家也越来越明白一个道理,并不是所有的场景都必须使用 C 进行开发。Python 可以应付大部分对性能要求不高的场景…

Visio绘制功能分解图

为什么要绘制功能分解图? 对于编程人员来说,具体分配任务的时候,必须知道自己要做什么,必须了解系统的大体框架。功能分解图可以帮助我们理清程序的框架,便于大局观的掌握。 用Visio2010创建功能分解图 1、选择模版 2、…

Heka:Go编写,来自Mozilla,高效、灵活的插件式数据挖掘工具(转)

转自:http://www.csdn.net/article/2013-05-02/2815116-introduce-from-mozilla-heka-go摘要:一直崇尚开源的Mozilla近日释放了Heka测试版——插件架构,Go编写。在支持使用Go扩展功能的同时,还通过允许“Sandboxed Filters”提供了…

cocos2d学习笔记2——学习资源

1. 视频 找了好几个视频,有一些讲得好的文件资源没有,后来终于找到一个讲得不错还有文件资源的,还有高清下载地址,虽然是2.2版本的,但是确实能学到不少东西,对用cocos2d做游戏有了基本的印象,对…

环境变量_配置JAVA环境变量

本文标识 : J00001本文编辑 : YiKi编程工具 : IDEA阅读时长 : 3分钟什么是环境变量?环境变量是在操作系统中一个具有特定名字的对象, 它包含了一个或者多个应用程序所将使用到的信息。为什么要配置环境变量?为了方便在控制台编译和运行java程序,不…

分布式消息队列 Kafka

分布式消息队列 Kafka 2016-02-25 杜亦舒Kafka是一个高吞吐量的、分布式的消息系统,由Linkedin开发,开发语言为scala具有高吞吐、可扩展、分布式等特点 适用场景 活动数据统计活动数据包括页面访问量(Page View)、被查看内容方面的…

漫游飞行_手机“飞行模式”为何没被淘汰?内行人坦言:其实是你不会用!

随着科技的不断创新,目前市面上出现的手机款式多种多样,品牌也非常多,有华为、苹果、三星和小米等等。手机的屏幕也是五花八门,有刘海屏、水滴全面屏等,这些屏幕之间都各有不同。而且手机的更新换代速度很快&#xff0…

multiselect多选下拉框

具体实现 <input type"hidden" id"q_dueDay" name"q_dueDay" value"${baseQueryBean.q_dueDay}">//这个为隐藏域后台直接使用这个为参数 <select id"example" name"example" multiple"multiple&qu…