Python应用实战-Clumper库 | Groupby具体案例用法
Agg
聚合描述性统计方法
agg如下图,可以理解成三个步骤,即group->split->summary
常用的描述性统计函数有:mean、count、unqiue、n_unique、sum、min和max
求学生的平均成绩、最优和最差成绩
from clumper import Clumpergrade_dicts = [{'gender': '男', 'grade': 98, 'name': '张三'}, {'gender': '女', 'grade': 88, 'name': '王五'}, {'gender': '女', 'grade': 99, 'name': '赵六'}, {'gender': '男', 'grade': 58, 'name': '李四'}](Clumper(grade_dicts) .agg(mean_grade=('grade', 'mean'), max_grade=('grade', 'max'), min_grade=('grade', 'min')) .collect()
)
[{'mean_grade': 85.75, 'max_grade': 99, 'min_grade': 58}]
求男生和女生各自的平均成绩、最优和最差成绩
from clumper import Clumpergrade_dicts = [{'gender': '男', 'grade': 98, 'name': '张三'}, {'gender': '女', 'grade': 88, 'name': '王五'}, {'gender': '女', 'grade': 99, 'name': '赵六'}, {'gender': '男', 'grade': 58, 'name': '李四'}](Clumper(grade_dicts) .group_by('gender') .agg(mean_grade=('grade', 'mean'), max_grade=('grade', 'max'), min_grade=('grade', 'min')) .collect())
[{'gender': '男', 'mean_grade': 78, 'max_grade': 98, 'min_grade': 58},
{'gender': '女', 'mean_grade': 93.5, 'max_grade': 99, 'min_grade': 88}]
Collect
一般Clumper函数返回的结果显示为Clumper类,是看不到具体内容的。
collect作用主要是展开显示。
剔除重复
剔除重复内容
from clumper import Clumper
data = [{"a": 1}, {"a": 2}, {"a": 2}](Clumper(data) .drop_duplicates() .collect()
)
[{'a': 1}, {'a': 2}]
什么是Group?
from clumper import Clumperlist_dicts = [{'a': 6, 'grp': 'a'},{'a': 2, 'grp': 'b'},{'a': 7, 'grp': 'a'},{'a': 9, 'grp': 'b'},{'a': 5, 'grp': 'a'}
](Clumper(list_dicts).group_by('grp')
)
<Clumper groups=('grp',) len=5 @0x103cb0290>
当前的group以grp作为关键词
现在经过 .group_by('grp')
操作后,说明你对每个grp组感兴趣。具体一点,一个组是{'grp': 'a'}
, 另一个组是{'grp': 'b'}.
Agg
without groups
from clumper import Clumperlist_dicts = [{'a': 6, 'grp': 'a'},{'a': 2, 'grp': 'b'},{'a': 7, 'grp': 'a'},{'a': 9, 'grp': 'b'},{'a': 5, 'grp': 'a'}
](Clumper(list_dicts).agg(s=('a', 'sum'),m=('a', 'mean')).collect())
[{'s': 29, 'm': 5.8}]
with groups
分别计算组grp=a、组grp=b的sum和mean
from clumper import Clumperlist_dicts = [{'a': 6, 'grp': 'a'},{'a': 2, 'grp': 'b'},{'a': 7, 'grp': 'a'},{'a': 9, 'grp': 'b'},{'a': 5, 'grp': 'a'}
](Clumper(list_dicts).group_by('grp').agg(s=('a', 'sum'),m=('a', 'mean')).collect())
[{'grp': 'a', 's': 18, 'm': 6},
{'grp': 'b', 's': 11, 'm': 5.5}]
agg内置的统计函数名
内置的统计函数,可直接通过字符串调用
{"mean": mean,"count": lambda d: len(d),"unique": lambda d: list(set(d)),"n_unique": lambda d: len(set(d)),"sum": sum,"min": min,"max": max,"median": median,"var": variance,"std": stdev,"values": lambda d: d,"first": lambda d: d[0],"last": lambda d: d[-1],
}
Transform
.transform()
与.agg()
类似。主要的区别是transform处理过程中,记录数和字段数不会出现压缩。
without groups
from clumper import Clumperdata = [{"a": 6, "grp": "a"}, {"a": 2, "grp": "b"}, {"a": 7, "grp": "a"}, {"a": 9, "grp": "b"}, {"a": 5, "grp": "a"}](Clumper(data) .transform(s=("a", "sum"), u=("a", "unique")) .collect())
[{'a': 6, 'grp': 'a', 's': 29, 'u': [2, 5, 6, 7, 9]},
{'a': 2, 'grp': 'b', 's': 29, 'u': [2, 5, 6, 7, 9]},
{'a': 7, 'grp': 'a', 's': 29, 'u': [2, 5, 6, 7, 9]},
{'a': 9, 'grp': 'b', 's': 29, 'u': [2, 5, 6, 7, 9]},
{'a': 5, 'grp': 'a', 's': 29, 'u': [2, 5, 6, 7, 9]}]
with groups
from clumper import Clumperdata = [{"a": 6, "grp": "a"},{"a": 2, "grp": "b"},{"a": 7, "grp": "a"},{"a": 9, "grp": "b"},{"a": 5, "grp": "a"}
](Clumper(data).group_by("grp").transform(s=("a", "sum"),u=("a", "unique")).collect()
)
[{'a': 6, 'grp': 'a', 's': 18, 'u': [5, 6, 7]},{'a': 7, 'grp': 'a', 's': 18, 'u': [5, 6, 7]},{'a': 5, 'grp': 'a', 's': 18, 'u': [5, 6, 7]},{'a': 2, 'grp': 'b', 's': 11, 'u': [9, 2]},{'a': 9, 'grp': 'b', 's': 11, 'u': [9, 2]}]
Mutate
clumper库中的row_number
可以给每条记录显示索引位置(第几个)。
without groups
from clumper import Clumper
from clumper.sequence import row_numberlist_dicts = [{'a': 6, 'grp': 'a'},{'a': 2, 'grp': 'b'},{'a': 7, 'grp': 'a'},{'a': 4, 'grp': 'b'},{'a': 5, 'grp': 'a'}
](Clumper(list_dicts).mutate(index=row_number()).collect()
)
[{'a': 6, 'grp': 'a', 'index': 1},{'a': 2, 'grp': 'b', 'index': 2},{'a': 7, 'grp': 'a', 'index': 3},{'a': 4, 'grp': 'b', 'index': 4},{'a': 5, 'grp': 'a', 'index': 5}]
with groups
from clumper import Clumper
from clumper.sequence import row_numberlist_dicts = [{'a': 6, 'grp': 'a'},{'a': 2, 'grp': 'b'},{'a': 7, 'grp': 'a'},{'a': 4, 'grp': 'b'},{'a': 5, 'grp': 'a'}
](Clumper(list_dicts).group_by('grp').mutate(index=row_number()).collect()
)
[{'a': 6, 'grp': 'a', 'index': 1},{'a': 7, 'grp': 'a', 'index': 2},{'a': 5, 'grp': 'a', 'index': 3},{'a': 2, 'grp': 'b', 'index': 1},{'a': 4, 'grp': 'b', 'index': 2}]
Sort
排序, 默认升序
without groups
from clumper import Clumperlist_dicts = [{'a': 6, 'grp': 'a'}, {'a': 2, 'grp': 'b'}, {'a': 7, 'grp': 'a'}, {'a': 9, 'grp': 'b'}, {'a': 5, 'grp': 'a'}](Clumper(list_dicts) #根据字段a进行排序 .sort(key=lambda d: d['a']) .collect())
[{'a': 2, 'grp': 'b'},
{'a': 5, 'grp': 'a'},
{'a': 6, 'grp': 'a'},
{'a': 7, 'grp': 'a'},
{'a': 9, 'grp': 'b'}]
with groups
from clumper import Clumperlist_dicts = [{'a': 6, 'grp': 'a'}, {'a': 2, 'grp': 'b'}, {'a': 7, 'grp': 'a'}, {'a': 9, 'grp': 'b'}, {'a': 5, 'grp': 'a'}](Clumper(list_dicts) .group_by('grp') .sort(key=lambda d: d['a']) .collect())
[{'a': 5, 'grp': 'a'},
{'a': 6, 'grp': 'a'},
{'a': 7, 'grp': 'a'},
{'a': 2, 'grp': 'b'},
{'a': 9, 'grp': 'b'}]
Ungroup
最后,如果你已经进行完了分组计算,想再次整合起来,取消分组状态,可以使用.ungroup()
应用
Python应用实战-Clumper库 | Groupby具体案例用法相关推荐
- Python应用实战-Clumper库 | 常用的数据操作函数
Keep keep函数可以从原始数据中抽取符合指定条件的子集. from clumper import Clumperlist_dicts = [{'a': 1}, {'a': 2}, {'a': 3 ...
- 【Python爬虫】BeautifulSoup4 库的一些用法
Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree). 它提供简单又常用的导航(navigating),搜索 ...
- Python应用实战-Clumper | dplyr式的Python数据操作包
Clumper可以用来处理嵌套样式的json数据结构. 安装 !pip3 install clumper 为了展示Clumper如何工作,我准备了pokemon.json, 由列表组成(该列表由多个字 ...
- Python应用实战-sql操作groupby常用技巧
前言 以下是我为大家准备的几个精品专栏,喜欢的小伙伴可自行订阅,你的支持就是我不断更新的动力哟! MATLAB-30天带你从入门到精通 MATLAB深入理解高级教程(附源码) tableau可视化数据 ...
- 【python教程】requests库的基本用法
文章目录
- python基础和第三方库 笔记(python基础完结包括高级用法,第三方库持续更新中...)
python基础 注:本笔记面向有一定基础的人 本笔记是本人快速复习python过程中记录的,不适合零基础的人学习python的主工具,可以作为辅工具,本笔记记录了入门阶段常用操作,如有错误的地方,希 ...
- Python爬虫入门(4):Urllib库的高级用法
Python爬虫入门(1):综述 Python爬虫入门(2):爬虫基础了解 Python爬虫入门(3):Urllib库的基本使用 Python爬虫入门(4):Urllib库的高级用法 Python爬虫 ...
- python的numpy库的基本用法_python numpy库np.percentile用法说明
在python中计算一个多维数组的任意百分比分位数,此处的百分位是从小到大排列,只需用np.percentile即可-- a = range(1,101) #求取a数列第90%分位的数值 np.per ...
- python自然语言处理案例-Python自然语言处理 NLTK 库用法入门教程【经典】
本文实例讲述了Python自然语言处理 NLTK 库用法.分享给大家供大家参考,具体如下: 在这篇文章中,我们将基于 Python 讨论自然语言处理(NLP).本教程将会使用 Python NLTK ...
最新文章
- MariaDB数据库介绍三、MHA(Master HA)实现主节点故障转移
- shell 调用 sqlplus 各种情况示例
- android从服务检查,android开发分享Android:你如何检查是否启用了特定的AccessibilityService...
- [Linux]常用命令与目录全拼
- VB判断指定的WORD文档是否被打开
- 【知识图谱】史上最全《知识图谱》2020综述论文,18位作者, 130页pdf
- Facebook反垃圾实践:人工治理与机器算法齐飞
- 从 global.console 看 Node.js 中的作用域
- 最详细的ECLIPSE Android SDK下载安装及配置教程
- android 模拟器 电脑配置,手机安卓模拟器多开对电脑配置要求与占用浅谈
- 2022电商人必备的7大工具推荐
- 【U+】U+通用财务数据库测试失败,无法保存。
- 黑苹果hidp显示不清楚_bigsur 黑苹果开启HIDPI失败解决方法
- android手机分区调整大小写,如何使用PQMagic调整磁盘分区容量大小
- 组策略设置桌面显示计算机图标,计算机组策略应用设置大全
- 计算机显示应用程序错误窗口,电脑出现应用程序错误窗口怎么办
- 国外一个免费的基于Java的PLC梯形图逻辑编辑与仿真软件
- 使用v-cli创建项目,引入element-ui构建用户管理页面实现增删改查
- 咸鱼CAD笔记—编辑工具
- html登录号如何显示用户名,HTML更改登录标签,登录后用户名
热门文章
- 网管型工业交换机如何创建网络冗余
- mysql内表和外表_Hive内表和外表的区别
- android listview 去掉水波纹效果_CocosCreator之分层管理的ListView
- java怎么截取后8位数字_java如何更快生成00000000~99999999的8位数字保存到文件中?...
- 微型计算机主机的主要组成部件是,微型计算机主机的主要组成部分有
- 通信系统的同步技术归纳
- 寄存器分配图着色_寄存器分配
- 小甲鱼python全部视频_小甲鱼全套教程之Python系列视频教程
- matlab评估边缘检测性能,【模糊推理】模糊逻辑图像边缘检测,原理+matlab代码~...
- 6号板编译失败找不到arm-none-linux-gnueabi-gcc