dataframe groupby_pandas学习--groupby&&grouper&&egg

1、groupby函数:

#数据源长这样
df.head()

20e4ea990b9637e8ad3b76b1bc39618b.png

1、我们统计'ext price'这个属性在每个月的累和(sum)值,resample 只有在index为date类型的时候才能用:

df.set_index('date').resample('M')['ext price'].sum()

2、统计每个用户每个月的sum值:

df.set_index('date').groupby('name')['ext price'].resample("M").sum()

换一种写法,使用Grouper写得更加简洁:

df.groupby(['name', pd.Grouper(key='date', freq='M')])['ext price'].sum()

Grouper里的freq可以方便的改成其他周期参数(resample也可以),比如:

df.groupby(['name', pd.Grouper(key='date', freq='A-DEC')])['ext price'].sum()

2、egg函数

从0.20.1开始,pandas引入了agg函数,它提供基于列的聚合操作。而groupby可以看做是基于行,或者说index的聚合操作。

从实现上看,groupby返回的是一个DataFrameGroupBy结构,这个结构必须调用聚合函数(如sum)之后,才会得到结构为Series的数据结果。
而agg是DataFrame的直接方法,返回的也是一个DataFrame。当然,很多功能用sum、mean等等也可以实现。但是agg更加简洁, 而且传给它的函数可以是字符串,也可以自定义,参数是column对应的子DataFrame。如:

df[["ext price", "quantity", "unit price"]].agg(['sum', 'mean'])

ee8046a424067c5baccac811efeb0e3e.png你还可以针对不同的列使用不同的聚合函数你还可以针对不同的列使用不同的聚合函数

你还可以针对不同的列使用不同的聚合函数:

df.agg({'ext price': ['sum', 'mean'], 'quantity': ['sum', 'mean'], 'unit price': ['mean']})

自定义函数你可以这么做:

# 这里的x是sku对应的column
get_max = lambda x: x.value_counts(dropna=False).index[0]
df.agg({'ext price': ['sum', 'mean'], 
        'quantity': ['sum', 'mean'], 
        'unit price': ['mean'], 
        'sku': [get_max]})

af30dc97bee32a6adf6703945a315fa3.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值