Pandas学习随笔(2) Group的学习

前言

除开了10min入门的教程后,大概进入了高级一点的用法,这里不会按照官方教程的顺序去学习,会按照自己的想法去跳跃性的学习,有需求者选择性的阅读吧。

正文

以下是太长不看系列
主要内容:Group by

  1. groupby是个object,用groupby.get_groups可获得对应df的切片
  2. groupby可接受mapping dict, function, 列/行名等多种分组方式
  3. 主要操作包括:Aggregation、Transformation、Filtration
  4. groupby.apply(),传入参数为各组的subset矩阵,即get_groups得到的子集矩阵。

1. Spliting

import pandas as pd
d = {'one':[1,1,1,1,1],
     'two':[2,2,2,2,2],
     'letter':['a','a','b','b','c']}
df = pd.DataFrame(d)
one = df.groupby('letter') # 按某列的值进行分组 默认是axis=0
one2 = df.groupby(['letter','one']) # 按多列的tuple对象进行分组

tmp = df.loc[:,'letter']
series_group_by = tmp .groupby(lambda x: tmp[x]) # 按值进行分组
series_ = tmp.groupby(level=0) # 按index进行分组

以上涉及到了有且仅有的两种group,分别是DataFrame.groupbySeries.groupby,两者的function大体上是一样的,但是还是有一部分的区别。而且由于Series不具有列名了,所以groupby时一般使用mapping dict或者Function去进行分组,而且接受的参数是对应的index而不是Values本身

Pandas学习随笔(2) Group的学习_第1张图片
Difference between these

由于group后的对象是没有定义__repr__的,所以其实是看不到内部结构的,但是也有少数的接口进行access内部的结果。

# 与上代码同个terminal
one.groups # 对应的分组,返回dict
one.indices # 对应的分组内的index,返回dict,与上行相似
one.get_groups # 划重点,可以直接获取该组的DataFrame的切片

2. Applying

# 与上代码同个terminal
one.apply(lambda x: x.loc[:,'one']/x.sum(0)['one']) 
one.agg([min,max,lambda x: ';'.join([str(_) for _ in list(x)])])   # 等同于one.agg()
one.pipe() # 接收的是 接收groupby的对象的Function
one.transform() # 返回一个无分组信息后的原矩阵,当然可以加入一些修改,类似于apply
  1. apply的用法比较tricky,每次传入的x是个DataFrame,也就是get_groups后取得的东西,所以需要注意如何使用和调用。以上相当于在求解每个one列在各组内的均值。也是十分常用的一个操作。
  2. 秀了一下骚操作,agg同上述的apply,但是返回的对象就不太一样了,上者返回的是同等于原矩阵的df,而agg返回的是以组别为index,原列名+这里使用Function作为Multindex的特殊df。同样地,非常适合快速处理组内的矩阵subset。
  3. 是为了简略f(g(h(df.groupby('group')), arg1=a), arg2=b, arg3=c),这个可以使用pipe进行管道化
  4. 类似于apply,但是传入的是按组按列subset的子集,apply传入的仅仅是按组subset的子集。

剩下有许多的类似于GroupBy.count的这些,但是几乎都是基于apply、agg的扩展,所以我不打算继续赘述,但下列会列举一些独特的、有意思的实现。

one.count() # 很简单,但是自己写代码难以同等速度的实现,返回的是每个组,每列中除了NaN的计数
one.cumcount() # 返回的东西很奇怪,但其实是每个组组内的计数,从0->组内总数-1
one.ngroup() # 类似上者,但是统计的是多少个组。 (可用来看组在整体中分布/增长速度)
one.nth() #截取某几行,可用int也可用list (apply很难实现,会变成MultiIndex)

剩下的都是sum mean median std max min size ohlc等基础的功能了,而且很多DataFrame的功能它一样可以使用,例如all any describe hist quantile rank等等。

3. combining

其实说是要combining,但其实每个apply后,都会返回一个combin后的对象,所以不需要操心。
重点是要了解到apply所传入的参数是啥,以及多思考能够怎么使用,而且需要注意的是,由于DataFrame是一个类似于dict的一个高级数据结构,所以其实很多操作在DF内部使用会比取出然后再自己操作快很多。

下一章写什么好呢。。。碎碎念

Reference

  1. GroupBy function
  2. GroupBy object relative function

你可能感兴趣的:(Pandas学习随笔(2) Group的学习)