Pandas 基础学习

文章目录

聚合

groupby

此处参考pandas的聚合操作: groupyby与agg
pandas提供基于行和列的聚合操作,groupby可理解为是基于行的,agg则是基于列的。
从实现上看,groupby返回的是一个DataFrameGroupBy结构,这个结构必须调用聚合函数(如sum)之后,才会得到结构为Series的数据结果。
而agg是DataFrame的直接方法,返回的也是一个DataFrame。当然,很多功能用sum、mean等等也可以实现。但是agg更加简洁, 而且传给它的函数可以是字符串,也可以自定义,参数是column对应的子DataFrame。
以下图数据为例column_map.head(8)
Pandas 基础学习
column_map.groupby(['work_order','work_station']) 表示按照前两个属性聚合。
这里会输出一个聚合类
<pandas.core.groupby.DataFrameGroupBy object at 0x111242630>
我们再调用一个类的函数
wo_ws_group = column_map.groupby(['work_order','work_station']) wo_ws_group.size()
Pandas 基础学习
新出现的列对应着每个工序工位下面有多少条记录
但是我们可以发现它的格式已经和我们平时使用的DataFrame不太一样了,我们可以使用下面的命令解决。
wo_ws_group.size().reset_index()
Pandas 基础学习
查看相关分组有以下命令
wo_ws_group.loc["0","11"] 查看工序工位分别为0和11的size。
wo_ws_group.get_group('0','11').head(8) 查看工序工位分别为0和11的记录
wo_ws_group['range_low'].idmin() 获取分组结果某一列的最小索引
wo_ws_group['work_order'].apply(lambda x:2*x).head(8) 应用apply做二次处理

agg

如下数据
data = pd.DataFrame([[2,11],[1,23],[5,11],[1.3,44],[5,111]],columns = ['price','quantity'],dtype = float)
Pandas 基础学习
data.agg({'price':['sum','mean'],'quantity':['sum']})计算汇总或者均值
Pandas 基础学习
也可以自定义函数输入agg
Pandas 基础学习
Pandas 基础学习
我们用另外一个数据集看下groupby和agg联合使用
参考自详解pandas数据分析之groupby分组聚合(下)

Pandas 基础学习
数据字段说明
1、platform:用户使用的终端设备类型,分pc端、m端、ios端、android端。
2、sku:某款特点商品的唯一编号。
3、expose_num:商品sku的累计曝光数。
4、click_num:商品sku的累计点击数。
5、cart_num:商品sku的累计加购数。
6、collect_num:商品sku的累计收藏数。
7、order_num:商品sku的累计下单数。

统计不同sku的总曝光:
1.以字典格式传入要聚合的字段和聚合函数:df.groupby('sku').agg({'expose_num':'sum'})
Pandas 基础学习
2.将聚合的字段作为索引,聚合函数传入agg
df.groupby('sku')['expose_num'].agg(np.sum)
Pandas 基础学习
3.直接将函数名作为字符串传入agg
df.groupby('sku')['expose_num'].agg('sum')
Pandas 基础学习
4.直接使用sum()函数
df.groupby('sku')['expose_num'].sum()
Pandas 基础学习
同时支持多字段分组和多字段聚合,这里不详细说明。

上一篇:GroupBy对象可以转换成列表或字典


下一篇:Python Dataframe 分组排序和 Modin