python-----数据聚合与分组运算

        对数据集进行分组并对各组应用一个函数(无论是聚合还是转换),通常是数据分 析工作中的重要环节。在将数据集加载、融合、准备好之后,通常就是计算分组统 计或生成透视表。pandas提供了一个灵活高效的gruopby功能,它使你能以一种自 然的方式对数据集进行切片、切块、摘要等操作。

        关系型数据库和SQL(Structured Query Language,结构化查询语言)能够如此流 行的原因之一就是其能够方便地对数据进行连接、过滤、转换和聚合。但是,像 SQL这样的查询语言所能执行的分组运算的种类很有限,由 于Python和pandas强大的表达能力,我们可以执行复杂得多的分组运算(利用任何 可以接受pandas对象或NumPy数组的函数)。

GroupBy机制:Hadley Wickham(许多热门R语言包的作者)创造了一个用于表示分组运算的术 语"split-apply-combine"(拆分-应用-合并)。第一个阶段,pandas对象(无论 是Series、DataFrame还是其他的)中的数据会根据你所提供的一个或多个键被拆 分(split)为多组。拆分操作是在对象的特定轴上执行的。例如,DataFrame可以 在其行(axis=0)或列(axis=1)上进行分组。然后,将一个函数(例:sum(); mean(); median; argmax()等)应用(apply)到 各个分组并产生一个新值。最后,所有这些函数的执行结果会被合并(combine) 到最终的结果对象中。结果对象的形式一般取决于数据上所执行的操作。下图大致说明了一个简单的分组聚合过程。

 新建一个dataframe:

data = pd.DataFrame({'key1':['a', 'a', 'b', 'b', 'a'], 
                     'key2':['one', 'two', 'one', 'two', 'one'], 
                     'dat1': np.random.randn(5),
                     'dat2': np.random.rand(5)})

1 、假设想要按key1进行分组,并计算data1列的平均值。实现该功能的方式有很 多,而我们这里要用的是:访问data1,并根据key1调用groupby: 

grouped = data['dat1'].groupby(data['key1'])

此时,变量grouped是一个GroupBy对象。它实际上还没有进行任何计算,只是含有一些 有关分组键data['key1']的中间数据而已。换句话说,该对象已经有了接下来对各分组 执行运算所需的一切信息。例如,我们可以调用GroupBy的mean方法来计算分组 平均值或求和: 

 

 在这里,数据(Series)根据分组 键进行了聚合,产生了一个新的Series,其索引为key1列中的唯一值。之所以结果 中索引的名称为key1,是因为原始DataFrame的列data['key1']就叫这个名字。 如果我们一次传入多个数组的列表,就会得到不同的结果:

 means = data['dat1'].groupby([data['key1'], data['key2']]).mean()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林丑丑@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值