数据聚合和分组操作

在数据分析中,经常需要对数据集进行分类,并在每一组上应用一个聚合函数或转换函数,pandas提供一个灵活的groupby接口,可以方便得进行数据聚合和分组操作。(函数的解释在代码块内部)

GroupBy机制

之前在学习R的时候,已经接触过拆分-应用-联合,原理是差不多的。
下面结合例子来学习groupby。

import numpy as np
import pandas as pd

#生成dataframe
df = pd.DataFrame({"k1":["va","va","vb","vb","vc"],
                   "k2":["vf","vf","vs","vt","vt"],
                   "d1":np.random.randn(5),
                   "d2":np.random.randn(5)})
df

Out:
在这里插入图片描述

#根据k1标签对d1进行分组
df_grouped = df["d1"].groupby(df["k1"])
df_grouped

Out:
在这里插入图片描述
此时的df_grouped变量是一个GroupBy对象。

#对每一组求均值
df_grouped.mean()

Out:
在这里插入图片描述

#通用的GroupBy方法是size,size方法返回一个包含组大小信息的Series
df.groupby(["k1"]).size()

size计数时包含NaN值,而count不包含NaN值
Out:
在这里插入图片描述

for name,group in df.groupby("k1"):
   print(name)
   print(group)

GroupBy对象支持迭代,会生成一个包含组名和数据块的2维元组序列
Out:
在这里插入图片描述

数据聚合

#对整个df进行分组时,列名可以作为参数
grouped2 = df.groupby("k1")
grouped2["d1"].quantile(0.9)

Out:
在这里插入图片描述

#如果要使用自己定义的聚合函数,需要将函数传递给aggregate或agg方法
def peak_to_peak(arr):
    return arr.max() - arr.min()

grouped2.agg(peak_to_peak)

Out:
在这里插入图片描述

分位数

pd.cut(data, bins, labels = None, duplicated = “raise”)
bins表示要将x划分为多少个等间距的区间;
labels设置区间的名称,若参数值为False则返回整数填充的区间名;
duplicates参数值为drop,则直接删除非唯一值。

pd.qcut(data, q, labels = None, duplicated = “raise”)
q为分位数。

df2 = pd.DataFrame({"data1":np.random.randint(20, 70, 10),
                    "data2":["A","A","B","A","B","B","B","A","A","B"]})
df2

Out:
在这里插入图片描述

#pd.cut用于将数据按照选择的箱位进行分桶
quartiles = pd.cut(df2.data1 , bins = 4)
quartiles

#pd.qcut可以将数据按照选择的样本分位数进行分桶,每份的数据量相同
pd.qcut(df2.data1,4)

Out:
在这里插入图片描述

交叉表

pd.crosstab(quartiles, df2["data2"])

Out:
在这里插入图片描述
在学习的过程中,发现了一篇博文写的不错,在这里分享给大家点击这里进行学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值