python怎么分组统计_python的分组统计之谜(一)

最近处理数据比较多,而分组统计经常用到,所以在此做个记录

# -*- coding: utf-8 -*-

"""

Created on Thu Jun 28 10:08:10 2018

@author: 鸣人吃土豆

"""

#导入数据

import pandas as pd

df = pd.read_excel("https://github.com/chris1610/pbpython/blob/master/data/sample-salesv3.xlsx?raw=True")

df["date"] = pd.to_datetime(df['date'])

df.head()

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

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

#想知道每个用户每个月的sum值,那么就需要一个groupby了:

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

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

# 按照年度,且截止到12月最后一天统计ext price的sum值

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

'''

从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'])

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

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

#统计sku中,购买次数最多的产品编号

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]})

#输出的列按照某个顺序排列,可以使用collections的OrderedDict:

get_max = lambda x: x.value_counts(dropna=False).index[0]

get_max.__name__ = "most frequent"

import collections

agg_dict = {

'ext price': ['sum', 'mean'],

'quantity': ['sum', 'mean'],

'unit price': ['mean'],

'sku': [get_max]}

# 按照列名的长度排序。 OrderedDict的顺序是跟插入顺序一致的

df.agg(collections.OrderedDict(sorted(agg_dict.items(), key = lambda x: len(x[0]))))

下次介绍pivot_table

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值