Pandas中的 transform()结合 groupby()用法示例详解
作者:cnhwl 时间:2023-01-26 10:00:09
首先,假设我们有如下餐厅数据集:
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]
})
如果我们想知道:每个餐厅在城市中所占的销售额百分比是多少?预期得到的输出是:
相比于原来的数据集,多了两列,分别是某个城市所有餐厅的销售总额,以及每个餐厅在城市中所占的销售额百分比。解决方案有两个:
方案一(较麻烦):
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')
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 中列的长度是一样的。
来源:https://blog.csdn.net/cnhwl/article/details/120169278
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
基于Python制作B站视频下载小工具
![](https://img.aspxhome.com/file/2023/7/80417_0s.jpg)
Javascript实现通过选择周数显示开始日和结束日的实现代码
浅谈javascript的分号[译]
如何使用FSO修改文件夹的名称
python使用dlib进行人脸检测和关键点的示例
![](https://img.aspxhome.com/file/2023/9/68469_0s.png)
Python竟然能剪辑视频
![](https://img.aspxhome.com/file/2023/7/83827_0s.gif)
Oracle数据库集复制方法浅议
Oracle学习笔记(一)
SQL数据库操作类
Python中pass的作用与使用教程
Python激活Anaconda环境变量的详细步骤
![](https://img.aspxhome.com/file/2023/0/76870_0s.png)
python中numpy.zeros(np.zeros)的使用方法
让网站容易被发现
php下检测字符串是否是utf8编码的代码
python中open函数的基本用法示例
Python如何安装第三方模块
Python判断某个用户对某个文件的权限
[翻译]JavaScript中对象的层次与继承
![](https://img.aspxhome.com/file/UploadPic/200812/31/cc-2-73s.png)
在Pycharm中修改文件默认打开方式的方法
![](https://img.aspxhome.com/file/2023/0/72130_0s.jpg)