python中数据聚合与分组运算

来源:互联网 发布:卫浴行业数据 编辑:程序博客网 时间:2024/06/01 07:37

在数据分析处理中,对数据进行分组并对各组应用一个函数(无论是聚合还是转换)计算分组统计或生成透视表,是数据分析工作中的重要环节。
python提供了一个灵活高效的groupby功能,它可以使你能以一种自然的方式对数据集进行切片、切块、摘要等操作。在python中主要有两个模块(itertools和pandas)提供了groupby方法。而pandas中的groupby功能尤为强大,可以根据一个或多个键拆分pandas对象、应用组内转换或其他运算,如规格化、线性回归、排名或提取子集等。
下面先来说说itertools中的groupby使用:
itertools.groupby()函数将迭代器中的重复相邻的数聚合在一起。
for key, group in groupby([1, 1, 3, 2, 2, 2, 4, 4, 4, 5]):
print(key, list(group))

(1, [1, 1])
(3, [3])
(2, [2, 2, 2])
(4, [4, 4, 4])
(5, [5])

也可以使用函数对挑选的规则进行个性化设置,只要作用于函数的两个元素返回的值相等,这两个元素就被认为是在一组的。比如下面要忽略大小写挑选出相同字母:
for key, group in groupby(“AaaBBbCccDdd”, lambda x: x.upper()):
print(key, list(group))

(‘A’, [‘A’, ‘a’, ‘a’])
(‘B’, [‘B’, ‘B’, ‘b’])
(‘C’, [‘C’, ‘c’, ‘c’])
(‘D’, [‘D’, ‘d’, ‘d’])
使用一个匿名函数使“A”和“a”都返回为“A”。然后再进行分组。

接下来,采用一个实例讲解groupby的用法。
设计一个场景:要将一个列表中所有连续的数字使用“-”连接,例如:[1,2,3]表示为[1-3]。
下面有一个列表:l = [6, 7, 18, 19, 20, 21, 22, 24, 27, 33, 37]
按照上面的规则对这个l列表进行解析。

将采用值与索引的差进行分组。
l列表为:
[6, 7, 18, 19, 20, 21, 22, 24, 27, 33, 37]
l索引为:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
两者相减为:
[6, 6, 16, 16, 16, 16, 16, 17, 19, 24, 27]
就可以对他进行分组了。

l = [6, 7, 18, 19, 20, 21, 22, 24, 27, 33, 37]
a = list()
b = []
result = []
function = lambda (i, v): v - i
for k, g in groupby(enumerate(l), function):
g = list(g)
b.append(k)
a.append(g)
for c in range(len(b)):
if [v for i, v in a[c]][0] != [v for i, v in a[c]][-1]:
result.append(“%d-%d” % ([v for i, v in a[c]][0], [v for i, v in a[c]][-1]))
if [v for i, v in a[c]][0] == [v for i, v in a[c]][-1]:
result.append([v for i, v in a[c]][0])
print result

得到结果:[‘6-7’, ‘18-22’, 24, 27, 33, 37]
最后,讲讲pandas中的groupby技术,先来对groupby的技术原理用一张图来说明:
这里写图片描述

(来自于:《利用python做数据分析》)
groupby技术其实就是按照拆分(split)-应用(apply)-合并(combine)的顺序最终得到的。
下面举例说明此过程:
首先,导入一个经典的数据集——Titanic数据集(不用在网上搜索这个数据集,在seaborn包中就有)。

import seaborn as sns
data = sns.load_dataset(“titanic”)
data.head()
这里写图片描述

假设要按sex进行分组,并计算age列的平均值。实现该功能的方式很多,而这里要用的是:访问age,并根据sex调用groupby:
grouped = data.age.groupby(data.sex)

阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 鼻子吸进去的气往嘴巴里怎么办 做完瑜伽之后大腿后侧特别紧怎么办 刚下生小狗腿后腿站不起来怎么办 脚被凳子压到了流血了怎么办还很痛 小狗脚被凳子压出血了怎么办 怀孕8个月脐带绕颈一周怎么办 练完瑜伽大腿两侧肌肉麻木怎么办 突然吃了辣火锅肚子烫怎么办 副鼻窦炎鼻头顶痛鼻子臭怎么办 一岁宝宝夜里睡觉不踏实怎么办 分手一个月了还是放不下前任怎么办 当晚上遇到烦心事睡不着该怎么办 为什么白天太累晚上就睡不着怎么办 白天走累的脚痛晚上睡不着怎么办 1岁宝宝感冒咳嗽流泪流鼻涕怎么办 宝宝不含母乳只吃奶瓶怎么办 宝宝习惯奶嘴不咬妈妈的乳头怎么办 我的乳晕和私处色素沉着怎么办 双盘打坐膝痛腿脚心处紫青怎么办? 双盘打坐两膝盖不能着地怎么办? 做完蹲起之后腿疼的受不了怎么办 孩子游泳学不会不想去了怎么办 自由泳打腿走水但水花大怎么办 老师上课发现学生课上自慰怎么办 生完孩子腿粗屁股大怎么办 产后42天检查子宫偏大怎么办 崇拜瑜伽老师喜欢上他了怎么办 练瑜伽下不了腰贴不住腿怎么办 吃母乳宝宝吸的奶头疼怎么办 孩子吃奶把奶头咬破了怎么办 奶头边上让孩子咬破了吃奶疼怎么办 腰部受过伤久坐缓解腰疼怎么办 小孩八个月了还在软得很怎么办 产后第三天乳房胀痛有硬块怎么办 怀孕七个多月了胎位不正怎么办 怀孕6个月梅毒1:4怎么办 怀孕了胃酸胃涨吐酸水怎么办 怀孕了胃酸胃胀吐酸水怎么办 练瑜伽大腿外侧扭筋了怎么办 膝盖运动时疼痛睡觉不疼怎么办 在农村里床上老是有小蜈蚣该怎么办