千家信息网

Pandas中transform()结合groupby()怎么用

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,小编给大家分享一下Pandas中transform()结合groupby()怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!首先,假设我们有如下餐厅数据集:import pand
千家信息网最后更新 2025年01月19日Pandas中transform()结合groupby()怎么用

小编给大家分享一下Pandas中transform()结合groupby()怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

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

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()怎么用"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

城市 销售 销售额 函数 数据 方案 餐厅 分组 相同 百分 百分比 长度 篇文章 索引 结果 输出 便捷 原始 普通 两个 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 英国国家卫生服务部卫生经济学评价数据库 迅雷网盘能当服务器吗 上市网络安全服务 小米pad数据库异常 安徽工业点胶软件开发 半导体行业属于互联网高科技类吗 简述防范网络安全应该注意什么 软件开发公司展望 软件开发哪个工作好找 青少年网络安全宣传网络漫画 丹江口互联网软件开发售后保障 网络安全法要多少章多少条 网站服务器安全维护价格 一般大学校园网络安全知识培训 8k纸关于网络安全的手抄报 互联网科技vr 网络服务器怎样备案 数据采集器软件开发 改了数据库也需要重启项目 网络安全设置通过 宽城区通用网络技术服务诚信合作 wow怀旧60服务器会免费么 家里的电脑开游戏服务器 文明重启如何解锁服务器 数据库故障有哪些 购买网络技术服务源头好货 北德汽车网络安全工程师培训 河北网络安全宣传周的主题 网络安全事件整改流程图 网络安全研讨会通知
0