首先,假设我们有如下餐厅数据集:

import pandas as pddf = pd.DataFrame({'restaurant_id': [101,102,103,104,105,106,107],'address': ['A','B','C','D', 'E', 'F', 'G'],'city': ['London','London','London','Oxford','Oxford', 'Durham', 'Durham'],'sales': [10,500,48,12,21,22,14]
})


如果我们想知道:每个餐厅在城市中所占的销售额百分比是多少?预期得到的输出是:

相比于原来的数据集,多了两列,分别是某个城市所有餐厅的销售总额,以及每个餐厅在城市中所占的销售额百分比。解决方案有两个:

方案一(较麻烦):

1、使用 groupby('city') 基于城市进行分组,对于这些组中的每一个组,选中其销售额列 ['sales'],然后使用函数 apply(sum) 或者sum() 对城市的销售额进行求和。

之后,新列被重命名为 city_total_sales 并且索引被重置(注意不能漏了 reset_index() ,因为 groupby('city') 生成的索引是城市,而我们希望城市作为普通列)。

city_sales = df.groupby('city'['sales'].sum().rename('city_total_sales').reset_index()

得到的 city_sales 如下:

2、用 merge() 函数把 city_sales 合并回去,得到的 df_new 如下:

df_new = pd.merge(df, city_sales, how='left')


3、最后,求百分比并保留两位小数,结果如下:

df_new['pct'] = df_new['sales'] / df_new['city_total_sales']
df_new['pct'] = df_new['pct'].apply(lambda x: format(x, '.2%'))


方案二(便捷):

1
transform() 函数在执行转换后保留与原始数据集相同数量的项目。因此,使用 groupby() 然后使用 transform(sum) 会返回相同的输出,结果如下图:

df['city_total_sales'] = df.groupby('city')['sales'].transform('sum')

代码翻译过来就是:数据集基于城市进行分组,然后选定销售额列,对每组的销售额进行求和,返回一个和原列长度一样的新列

2

与方案一相同。

df['pct'] = df['sales'] / df['city_total_sales']
df['pct'] = df['pct'].apply(lambda x: format(x, '.2%'))

总结:可以看出,在对 DataFrame 进行分组 groupby() 之后,如果是使用 apply() 或者直接使用某个统计函数,得到的新列的长度与分组得到的组数是一样的;而如果使用 transform()得到的新列与 DataFrame 中列的长度是一样的

Pandas中的 transform() 结合 groupby() 用法示例相关推荐

  1. python中的随机函数random的用法示例

    这篇文章主要介绍了python中的随机函数random的用法示例,详细的介绍了python 随机函数random的用法和示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 一.random模块简介 ...

  2. pandas pandas中stack()与unstack()函数用法

    pandas pandas中stack()与unstack()函数用法

  3. mysql中vlookup函数_vlookup函数用法示例,如何使用vlookup函数

    vlookup函数用法示例,如何使用vlookup函数 优亿在线 26 2020-10-30 在excel中提及数据查看,很多人最先想起的便是vlookup函数,由于很多人第一个触碰到的函数便是vlo ...

  4. 读书记录——pandas中的分组方法groupby(一)

    pandas的group分组 1.第一个简单案例 1)数据和依赖包准别 import pandas as pd import numpy as np import random df = pd.Dat ...

  5. Pandas中loc和iloc函数用法详解(源码+实例)

    loc函数:通过行索引 "Index" 中的具体值来取行数据(如取"Index"为"A"的行) iloc函数:通过行号来取行数据(如取第二行 ...

  6. Pandas中的loc与iloc用法详解

    1.基本简介 1.1 loc与iloc基本含义 loc函数:通过行索引 "Index" 中的具体值来取行数据(如取"Index"为"A"的行 ...

  7. python3 open函数_python中open函数的基本用法示例

    前言 本文主要介绍的是关于python中open函数用法的相关资料,用法如下: name = open('errname.txt','w') name.readline() name.close() ...

  8. python的random()函数用法_python中的随机函数random的用法示例

    一.random模块简介 Python标准库中的random函数,可以生成随机浮点数.整数.字符串,甚至帮助你随机选择列表序列中的一个元素,打乱一组数据等. 二.random模块重要函数 1 ).ra ...

  9. linux命令 mv -v,Linux中mv命令的高级用法示例

    前言 mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录. 命令格式: mv [选项] 源文件或 ...

最新文章

  1. linux扩容家目录,linux 根目录扩容
  2. mega_[MEGA DEAL]终极Java专家认证捆绑包(98%)
  3. HDU3923-Invoker-polya n次二面体
  4. 深度学习~循环神经网络RNN, LSTM
  5. 【图像分类】分类专栏正式上线啦!初入CV、AI你需要一份指南针!
  6. 计算机网络是如何通信的【一】
  7. 高效运维最佳实践:如何做好On-call和事故响应?
  8. 结构体排序二~1339: 考试排名(带技巧的输入)
  9. [十二省联考 2019] 异或粽子(可持久化字典树 + 二叉堆)
  10. fiber报错 (type *big.Int has no field or method FillBytes)
  11. python的简单程序代码_小白学编程?从一个简单的程序开始学习Python编程
  12. php中如何实现多进程
  13. Mac上“照片”的终极工具箱​​​​ PowerPhotos
  14. 知识竞赛时,PPT模板如何选择确定,或自定义?
  15. STELLA—系统动力学仿真软件 System Dynamics仿真
  16. JMP软件在质量管理中的应用简述
  17. movie制作的电影站wordpress视频主题
  18. 商标注册中的字体也会侵权?这是真事
  19. Flume或Kafka和Elasticsearch整合
  20. 二叉树、平衡二叉树、完全二叉树、满二叉树

热门文章

  1. 子窗体菜单合并到父窗体菜单的解决办法
  2. C语言试题三十四之求除1到m之内(含m)能北7或11整除的所有整数放在数组a中,通过n返回这些数的个数。
  3. LeetCode之Single Number
  4. java阻塞队列作用_简单理解阻塞队列(BlockingQueue)中的take/put方法以及Condition存在的作用...
  5. html 图片 保持长宽比,实现图片在页面中宽高一直保持16:9比例的方法
  6. 软件配置管理(六)常用配置软件配置工具指令
  7. swift string转int_swift中结构体和类的区别(值类型和引用类型的区别)
  8. 宫崎骏动画里的新垣结衣见过没?简直美呆!
  9. 这可能是这次疫情最搞笑的事情,可看着看着却鼻酸了
  10. 从基础概念到数学公式,这是一份520页的机器学习笔记(图文并茂)