下面是关于Python通用的group-by归约方法的完整攻略。
1. 概述
group-by
是一种常见的归约操作,它将一组数据按照某个键(key)分组,然后对每个组进行一些计算或者操作。在Python中,group-by
是通过 itertools.groupby
来实现的。正如其名,itertools.groupby
是 itertools
模块中的一个函数,它接受两个参数:序列和函数,函数用于确定元素属于哪个组。
2. groupby函数的基本用法
使用 groupby
的基本流程如下:
- 导入
itertools
模块
import itertools
- 准备数据
data = [('A', 1), ('A', 2), ('B', 5), ('B', 8), ('C', 2), ('C', 3)]
- 定义一个函数,用于指定分组规则。该函数需要返回一个用于分组的键。
def get_key(item):
return item[0]
- 使用
groupby
对数据进行分组,需要使用sorted
函数将数据按照分组规则进行排序。
groups = itertools.groupby(sorted(data, key=get_key), get_key)
- 遍历分组结果,进行统计或操作。
for key, group in groups:
print(key)
for item in group:
print(item)
输出结果为:
A
('A', 1)
('A', 2)
B
('B', 5)
('B', 8)
C
('C', 2)
('C', 3)
3. 示例1:求平均值
以下示例展示了如何在Python中使用 groupby
计算一组数据的平均值。假设我们有以下数据:
data = [('A', 1), ('A', 2), ('B', 5), ('B', 8), ('C', 2), ('C', 3)]
我们的任务是按照键值分组,并计算每组数据的平均值。
import itertools
data = [('A', 1), ('A', 2), ('B', 5), ('B', 8), ('C', 2), ('C', 3)]
# 定义分组函数
def get_key(item):
return item[0]
# 对数据进行排序和分组
groups = itertools.groupby(sorted(data, key=get_key), get_key)
# 遍历分组结果,计算每组数据的平均值
for key, group in groups:
values = [item[1] for item in group]
print("Key:{} Avg:{}".format(key, sum(values) / len(values)))
结果输出为:
Key:A Avg:1.5
Key:B Avg:6.5
Key:C Avg:2.5
4. 示例2:对字符串列表进行分组
以下示例展示了如何在Python中使用 groupby
对字符串列表进行分组。假设我们有以下数据:
data = ["apple", "banana", "cat", "dog", "elephant", "fish", "grape", "horse", "iguana"]
我们的任务是按照字符串长度分组,并打印每个组的元素。
import itertools
data = ["apple", "banana", "cat", "dog", "elephant", "fish", "grape", "horse", "iguana"]
# 定义分组函数
def get_key(item):
return len(item)
# 对数据进行排序和分组
groups = itertools.groupby(sorted(data, key=get_key), get_key)
# 遍历分组结果,打印每个组的元素
for key, group in groups:
print("Length of word:{} Words:{}".format(key, list(group)))
输出结果为:
Length of word:1 Words:['a', 'c', 'd', 'f', 'g', 'i']
Length of word:3 Words:['cat', 'dog', 'fig']
Length of word:4 Words:['fish', 'grap']
Length of word:5 Words:['apple', 'horse']
Length of word:6 Words:['banana', 'iguana']
Length of word:8 Words:['elephant']
以上就是关于Python中 groupby
的基本用法以及两个使用示例。需要注意的是,在使用 groupby
进行分组时,必须先将数据按照分组规则进行排序。另外,groupby
返回的是一个可以遍历的对象,每个遍历返回的是一个键值对(key, group),其中 key 表示分组的键值,group 表示对应的分组数据。