GroupBy技术
对分组进行迭代 | groupby对象支持迭代,可以产生一组二元元组(有分组名和数据块组成) |
for name,group in df.groupby('key') |
选取一个或一组列 | df.groupby('key1')['data1'] 等于 df['data1'].groupby(df['key1']) |
以key1为目标分组出data1对应数据 |
通过字典或Series进行分组 | mapping = {‘a':'red' , 'b' = 'red' , 'c':'blue'} ----->df.groupby(mapping,axis = 1) |
将原来数据中的a和b分为一组称red,c为一组称blue |
通过函数进行分组 | people.groupby(len) 求取索引中字符串长度的数组 |
根据索引级别分组 | df.groupby(level = ) |
数据聚合
面向列的多函数应用
grouped = tips.groupby(['sex']) | 根据sex对tips进行分组 |
grouped_pct = grouped['tip_pct'] |
grouped_pct.agg('mean') | 将函数名以字符串形式传入 |
以“无索引”的形式返回聚合数据
向groupby传入as_index = False禁用分组建组成的索引
分组级运算和转换
transform方法 | 将一个函数应用到各个分组,然后将结果放置到适当的位置上。 |
如果各分组产生的是一个标量值,则该值就会被广播出去 |
def demean(arr) : return arr - arr.mean() |
demeaned = people .groupby(key).transform(demean) |
apply方法(拆分——应用——合并) | 传入apply的函数在DataFrame的各个片段上调用,然后结果由pandas.concat组装到一起,并以分组名称进行标记 |
def top (df,n=5,column = 'tip_pct'): return df.sort_index(by = column)[-n:] |
tips.groupby('smoker').apply(top,n=1) |
传给apply的函数能够接受其他参数或关键字,可以将这些内容放在函数名后面一并传入 |
group_key = false 传入groupby可禁止分组键 |
分位数和桶分析
1. cut和qcut方法 | 根据指定面元或样本分位数将数据拆分成多块 |
2. groupby | 将cut与groupby结合起来就能实现对数据集的桶或分位数分析 |
透视表和交叉表
透视表pivot_table
交叉表:crosstab