- 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
”’