目录
分组计算
分组计算三步曲:拆分 -> 应用 -> 合并
- 拆分:根据什么进行分组?
- 应用:每个分组进行什么样的计算?
- 合并:把每个分组的计算结果合并起来。
以一个DataFrame类型的df为例:
df = pd.DataFrame({'key1': ['a', 'a', 'b', 'b', 'a'],
'key2': ['one', 'two', 'one', 'two', 'one'],
'data1': np.random.randint(1, 10, 5),
'data2': np.random.randint(1, 10, 5)})
df
对Series进行分组
通过索引对齐关联起来
# 根据一层索引来分组
grouped = df['data1'].groupby(df['key1'])
grouped.mean()
运行结果为:
key1
a 3.0
b 3.5
# 根据两层索引来分组
df['data1'].groupby([df['key1'], df['key2']]).mean()
运行结果为:
key1 key2
a one 2
two 5
b one 4
two 3
对DataFrame分组
# 根据一层索引来分组
df.groupby('key1').mean()
# 根据两层索引来分组
# 只获取其中一列数据的分组运算
means = df.groupby(['key1', 'key2']).mean()['data1']
means
运行结果为:
key1 key2
a one 2
two 5
b one 4
two 3
# 运算函数 和 需要分组的数据 顺序可以调换
df.groupby(['key1', 'key2'])['data1'].mean()
运行结果为:
key1 key2
a one 2
two 5
b one 4
two 3
# unstack函数将数据从”花括号结构“变成”表格结构“,即要将其中一层的列索引变成行索引.
means.unstack()
求每个分组的元素个数 size()
df.groupby(['key1', 'key2']).size()
运行结果为:
key1 key2
a one 2
two 1
b one 1
two 1
对分组进行迭代
输出分组后的所有组别
for name, group in df.groupby('key1'):
print name
print group
运行结果为:
a
data1 data2 key1 key2
0 1 6 a one
1 5 9 a two
4 3 5 a one
b
data1 data2 key1 key2
2 4 7 b one
3 3 7 b two
for name, group in df.groupby(['key1', 'key2']):