Pandas中的 transform() 结合 groupby() 用法示例

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

import pandas as pd

df = 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]
})

Pandas中的 transform() 结合 groupby() 用法示例
如果我们想知道:每个餐厅在城市中所占的销售额百分比是多少?预期得到的输出是:
Pandas中的 transform() 结合 groupby() 用法示例
相比于原来的数据集,多了两列,分别是某个城市所有餐厅的销售总额,以及每个餐厅在城市中所占的销售额百分比。解决方案有两个:

方案一(较麻烦):

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 如下:

Pandas中的 transform() 结合 groupby() 用法示例
2、用 merge() 函数把 city_sales 合并回去,得到的 df_new 如下:
df_new = pd.merge(df, city_sales, how='left')

Pandas中的 transform() 结合 groupby() 用法示例
3、最后,求百分比并保留两位小数,结果如下:
df_new['pct'] = df_new['sales'] / df_new['city_total_sales']
df_new['pct'] = df_new['pct'].apply(lambda x: format(x, '.2%'))

Pandas中的 transform() 结合 groupby() 用法示例
方案二(便捷):

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

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

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

Pandas中的 transform() 结合 groupby() 用法示例

2

与方案一相同。

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

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

Original: https://blog.csdn.net/cnhwl/article/details/120169278
Author: cnhwl
Title: Pandas中的 transform() 结合 groupby() 用法示例

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

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

(0)

大家都在看

  • Python练习实例021

    问题:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半加一个。到第10…

    Python 2023年6月11日
    079
  • Python爬虫:采集热门电影信息,分析一下有没有好看的,周末带女神一起去看!

    一、前言 最后,女神邀请我去看电影,但她不知道要看什么,所以我当然要准备。 [En] Finally, the goddess asked me to go to the cine…

    Python 2023年5月24日
    082
  • 工程坐标转换方法C#代码实现

    1. 前言 2. 计算总体框架 3. C#代码实现 3.1 整体类的构建 3.2 椭球参数赋值 3.3 转换1、3(大地经纬度坐标与地心地固坐标的转换) 3.4 投影转换 3.5 …

    Python 2023年10月13日
    078
  • docker部署一个最简单的flask项目

    一、需要一个flask项目 这里采用pycharm新增一个最小的flask项目 启动项目的入口是app.py 启动后,访问控制台地址即可 注意:当项目中的依赖包太多的时候,需要批量…

    Python 2023年8月9日
    059
  • python flask搭建高可用的MVC框架

    众所周知,Python的两大web框架为Django和Flask框架。Django框架大而全,而Flask是轻量级的框架,很多扩展功能需要自己写。 在开始之前,先了解一下flask…

    Python 2023年8月13日
    046
  • 瑞吉外卖实战项目全攻略——优化篇第二天

    瑞吉外卖实战项目全攻略——优化篇第二天 该系列将记录一份完整的实战项目的完成过程,该篇属于优化篇第二天,主要负责完成读写分离问题 案例来自B站黑马程序员Java项目实战《瑞吉外卖》…

    Python 2023年10月17日
    043
  • python之列表详解

    文章目录 * – 一.创建列表 – + 1.基于弱数据类型语言的定义 + 2.通过全局函数list()定义 + 3.创建空列表 – 二.访问列表…

    Python 2023年7月31日
    062
  • 聚类的评价指标

    聚类的评价指标 对于聚类结果的评价方法一般可以分为内部评估法(internal evaluation)与外部评估方法(external evaluation)。 外部评估方法是指在…

    Python 2023年9月15日
    030
  • shell命令(一)

    什么是shell? Shell是一个应用程序,它连接了用户和Linux内核,让用户能够更加高效、安全、低成本地使用Linux内核,这就是Shell的本质。 shell与Linux系…

    Python 2023年6月10日
    080
  • Pandas 数据结构之 DataFrame使用教程

    Pandas 数据结构 DataFrame 简介 DataFrame 实例化 行数据的选择 * 1.按位置选择行数据(单行选择) 2.按位置选择行数据(多行选择:类似于切片) 3….

    Python 2023年8月7日
    047
  • 软考复盘:我的一些复习经验分享

    大家好,我是Edison。最近几天阳了,全身乏力头疼,38.5度高烧,好在症状较轻,经过一天躺平加吃了芬必得后(芬必得真乃神药),退烧了,也不乏力了,也就趁娃娃睡觉时间跟大家分享一…

    Python 2023年10月11日
    060
  • 使用Python中的tkinter模块实现GUI界面的学生信息管理系统

    本文只有代码,介绍了有关GUI界面的学生信息管理系统的实现。 已经过调试没有很大问题。如有错误,还请批评指正。 1.导入tkinter模块 import tkinter as tk…

    Python 2023年8月29日
    042
  • 10python字典

    列表和字典的区别是列表可以通过索引来访问值,而字典可以通过名称来访问各个值。 字典这种数据结构称为 映射(mapping),字典是Python中唯一内置映射类型,值不按照顺序排列,…

    Python 2023年10月30日
    034
  • Django+vscode调试/Django 项目创建时的目录设置/linux_保持进程后台运行/django保持服务后台运行/

    Django+vscode调试/linux_保持进程后台运行/django保持服务后台运行/ references vscode+django开发教程 Python and Dja…

    Python 2023年8月6日
    060
  • 行百里者半九十——scrapy 框架(1)

    scrapy 框架初识 * – 安装 – 认识 – 简单的代码实现 安装 如果没记错,python 3.6 及以上版本可以直接用 pip ins…

    Python 2023年10月6日
    041
  • 联邦学习-FATE,job的 DSL&CONF配置参数解析

    Job概念 在使用FATE启动一个训练模型任务(Job)时,必须的两个参数文件:dsl和conf(Task Submit Runtime Conf );任务启动流程图: ; 2. …

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