python学习笔记--groupby

- groupby简介

  • 1)groupby主要用户数据描述性统计分析,包括: 按一列或多列分组求平均数,计数,标准差等。
  • 2) 经过优化的GroupBy的方法

    count       分组中非NA值的数量
    sum         非NA值的和
    mean        非NA值的平均值
    median      非NA值的算术中位数
    std、var    无偏(分母为n-1)标准差和方差
    min、max    非NA值的最小值和最大值
    prod        非NA值的积
    first、last 第一个和最后一个非NA值
    

2. groupby应用示例

import numpy as np
import pandas as pd
df = pd.DataFrame({'key1':['a', 'a', 'b', 'b', 'a'],
        'key2':['one', 'two', 'one', 'two', 'one'],
        'data1':[1,2,3,4,5],
        'data2':np.random.randn(5)})
out:
   data1     data2 key1 key2
0      1 -0.588880    a  one
1      2 -0.348742    a  two
2      3 -1.566115    b  one
3      4  1.405010    b  two
4      5 -1.429402    a  one
  • (1)按一列分组统计
grouped=df['data1'].groupby(df['key1'])
注:grouped为生成的DataFrameGroupBy对象,实际未进行任何聚合

1)求均值
group_avg=grouped.mean()
key1
a    2.666667
b    3.500000
Name: data1, dtype: float64
2)计数
group_count=grouped.count()
Out[89]: 
key1
a    3
b    2
Name: data1, dtype: int64

注:类似sql, select key1,count(*),avg(data1) from df group by key1

  • (2) 按多列统计
grouped=df['data1'].groupby([df['key1'],df['key2']])

grouped.mean()
Out[94]: 
key1  key2
a     one     3
      two     2
b     one     3
      two     4
Name: data1, dtype: int64

注: 类似sql, select key1,key2,avg(data1) from df group by key1,key2

(3) 聚合size

len(grouped.size())
Out[107]: 4

(4) comcount : 相同product_id按index进行排序,类似row_number(product_id),

user_order[user_order.product_id==24830].groupby(['product_id'])['product_id'].cumcount()+1

”’
18293176 1
18293748 2
”’
(5)所有的列的值,与按’s_type’的值groupby后相同。 如,按s_type,groupby后123=2, 则其他列的值都为2

 a=pd.DataFrame({'score':[30,20,10],
                's_type':[123,120,12],
                'user_id':[01,01,02]})
a.groupby(['s_type']).count()

”’
age user_id
s_type
12 1 1
123 2 2
”’

(6)自定义聚合函数grouped.agg(x)

grouped=a.groupby(['s_type'])
agg_dic={'user_id':{'all_times':'count'},
         'score':{'score_m':lambda x: sum(x>20 ), #同一字段产生多个指标
                  'all_score':'sum'}
         }
result=grouped.agg(agg_dic)

”’
score user_id
all_score score_m all_times
s_type
12 10 0 1
120 20 0 1
123 30 1 1
”’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值