【pandas技巧】group by+agg+transform函数

2023-10-30 03:36

本文主要是介绍【pandas技巧】group by+agg+transform函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1. group by+单个字段+单个聚合

2. group by+单个字段+多个聚合

3. group by+多个字段+单个聚合

4. group by+多个字段+多个聚合

5. transform函数


studentsgradesexscoremoney
0小狗小学部female95844
1小猫小学部male93836
2小鸭初中部male83854
3小兔小学部female90931
4小花小学部male81853
5小草小学部male80991
6小狗初中部female81854
7小猫小学部male93886
8小鸭小学部male88983
9小兔小学部male86891
10小花初中部male92830
11小草初中部male84948

1. group by+单个字段+单个聚合

1.1 方法一

# 求每个人的总金额:
total_money=df.groupby("students")["money"].sum().reset_index()
total_money

1.2 方法二(使用agg)

df.groupby("students").agg({"money":"sum"}).reset_index()
#或者
df.groupby("students").agg({"money":np.sum}).reset_index()
studentsmoney
0小兔1820
1小狗1711
2小猫1670
3小花1861
4小草1825
5小鸭1719

2. group by+单个字段+多个聚合

2.1 方法一(使用group by+merge)

mean_money = df.groupby("students")["money"].mean().reset_index()
mean_money.columns = ["students","mean_money"]
mean_money
total_mean = total_money.merge(mean_money)
total_mean

total_mean = total_money.merge(mean_money)
total_mean
studentstotal_moneymean_money
0小兔1820910.0
1小狗1711855.5
2小猫1670835.0
3小花1861930.5
4小草1825912.5
5小鸭1719859.5

2.2 方法二(使用group by+agg)

total_mean = df.groupby("students").agg(total_money=("money", "sum"),mean_money=("money", "mean")).reset_index()
total_mean
studentstotal_moneymean_money
0小兔1820910.0
1小狗1711855.5
2小猫1670835.0
3小花1861930.5
4小草1825912.5
5小鸭1719859.5

3. group by+多个字段+单个聚合

3.1 方法一

df.groupby(["students","grade"])["money"].sum().reset_index()
studentsgrademoney
0小兔初中部1820
1小狗初中部843
2小狗小学部868
3小猫小学部1670
4小花初中部910
5小花小学部951
6小草初中部1825
7小鸭初中部1719

3.2 方法二(使用agg)

df.groupby(["students","grade"]).agg({"money":"sum"}).reset_index()
studentsgrademoney
0小兔初中部1820
1小狗初中部843
2小狗小学部868
3小猫小学部1670
4小花初中部910
5小花小学部951
6小草初中部1825
7小鸭初中部1719

4. group by+多个字段+多个聚合

agg函数的使用的方法是:agg(新列名=("原列名", "统计函数"))

df.groupby(["students","grade"]).agg(total_money=("money", "sum"),mean_money=("money", "mean"),total_score=("score", "sum")).reset_index()
studentsgradetotal_moneymean_moneytotal_score
0小兔初中部1820910.0192
1小狗初中部843843.088
2小狗小学部868868.093
3小猫小学部1670835.0178
4小花初中部910910.095
5小花小学部951951.098
6小草初中部1825912.5184
7小鸭初中部1719859.5173

5. transform函数

 5.1 方法一(使用groupby + merge)

df_1 = df.groupby("grade")["score"].mean().reset_index()
df_1.columns = ["grade", "average_score"]
df_1
gradeaverage_score
0初中部85.00
1小学部88.25
df_new1 = pd.merge(df, df_1, on="grade")
df_new1
studentsgradesexscoremoneyaverage_score
0小狗小学部female9584488.25
1小猫小学部male9383688.25
2小兔小学部female9093188.25
3小花小学部male8185388.25
4小草小学部male8099188.25
5小猫小学部male9388688.25
6小鸭小学部male8898388.25
7小兔小学部male8689188.25
8小鸭初中部male8385485.00
9小狗初中部female8185485.00
10小花初中部male9283085.00
11小草初中部male8494885.00

5.2 方法二(使用groupby + map)

dic = df.groupby("grade")["score"].mean().to_dict()
dic
{'初中部': 85.0, '小学部': 88.25}
df_new1["average_map_score"] = df["grade"].map(dic)
df_new1
studentsgradesexscoremoneyaverage_scoreaverage_map_score
0小狗小学部female9584488.2588.25
1小猫小学部male9383688.2588.25
2小兔小学部female9093188.2585.00
3小花小学部male8185388.2588.25
4小草小学部male8099188.2588.25
5小猫小学部male9388688.2588.25
6小鸭小学部male8898388.2585.00
7小兔小学部male8689188.2588.25
8小鸭初中部male8385485.0088.25
9小狗初中部female8185485.0088.25
10小花初中部male9283085.0085.00
11小草初中部male8494885.0085.00

5.3 方法三(使用transform一步到位)

df_new1["average_trans_score"] = df.groupby("grade")["score"].transform("mean")
df_new1
studentsgradesexscoremoneyaverage_scoreaverage_map_scoreaverage_trans_score
0小狗小学部female9584488.2588.2588.25
1小猫小学部male9383688.2588.2588.25
2小兔小学部female9093188.2585.0085.00
3小花小学部male8185388.2588.2588.25
4小草小学部male8099188.2588.2588.25
5小猫小学部male9388688.2588.2588.25
6小鸭小学部male8898388.2585.0085.00
7小兔小学部male8689188.2588.2588.25
8小鸭初中部male8385485.0088.2588.25
9小狗初中部female8185485.0088.2588.25
10小花初中部male9283085.0085.0085.00
11小草初中部male8494885.0085.0085.00

这篇关于【pandas技巧】group by+agg+transform函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/305337

相关文章

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

Python进阶之列表推导式的10个核心技巧

《Python进阶之列表推导式的10个核心技巧》在Python编程中,列表推导式(ListComprehension)是提升代码效率的瑞士军刀,本文将通过真实场景案例,揭示列表推导式的进阶用法,希望对... 目录一、基础语法重构:理解推导式的底层逻辑二、嵌套循环:破解多维数据处理难题三、条件表达式:实现分支

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

MySQL中REPLACE函数与语句举例详解

《MySQL中REPLACE函数与语句举例详解》在MySQL中REPLACE函数是一个用于处理字符串的强大工具,它的主要功能是替换字符串中的某些子字符串,:本文主要介绍MySQL中REPLACE函... 目录一、REPLACE()函数语法:参数说明:功能说明:示例:二、REPLACE INTO语句语法:参数

python中update()函数的用法和一些例子

《python中update()函数的用法和一些例子》update()方法是字典对象的方法,用于将一个字典中的键值对更新到另一个字典中,:本文主要介绍python中update()函数的用法和一些... 目录前言用法注意事项示例示例 1: 使用另一个字典来更新示例 2: 使用可迭代对象来更新示例 3: 使用