Blaze(五):数据的分割-应用-组合-分组

数据的分割-应用-组合-分组

分组操作将一张表切分为多个块,并对每个块进行操作。

以species分组,并对petal求平均值

# coding: utf-8

from blaze import data, by
from blaze.utils import example

d = data('sqlite:///{}::iris'.format(example('iris.db')))
print(by(d.species, avg=d.petal_length.mean()).peek())

对于描述许多有用的变换,split-apply-combine操作是一种简单而强大的方式。它被所有后端高效支持。

1. 参数

by方法有一个位置参数(决定如何对表进行分组)和多个关键字参数(对每一个份组执行的操作)。形式如下:

by(grouper, name=reduction, name=reduction, ...)

例子:以species对iris数据集分组,并对每个分组计算petal_length的最小值、最大值和最大值与最小值间的差。

print(by(d.species, min=d.petal_length.min(), max=d.petal_length.max(),
         ratio=d.petal_length.max()-d.petal_length.min()).peek())

输出:

           species  max  min  ratio
0      Iris-setosa  1.9  1.0    0.9
1  Iris-versicolor  5.1  3.0    2.1
2   Iris-virginica  6.9  4.5    2.4
2. 限制

与内存型的dataframes例如pandasdplyr相比,这个接口有两个方面的限制:

  1. 必须同时指定分组方式和相应操作
  2. “apply”阶段必须是一个reduction

这些限制让它更方便向数据集传达你的意图,并有效分发和并行计算。

3. 不能做的事

不能只指定如何分组而没有指定对每个分组的操作,例如:

groups = by(mytable.mycolumn)  # Can't do this  

不能指定non-reducing的apply操作(尽管有些后端通过改变而正常工作),例如:

groups = by(d.A, result=d.B / d.B.max())  # Can't do this
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值