python 数据分组后看每组多少个_【Python】分组统计GroupBy技术详解

摘要

进行数据分析时,GroupBy分组统计是非常常用的操作,也是十分重要的操作之一。基本上大部分的数据分析都会用到该操作,本文将对Python的GroupBy分组统计操作进行讲解。

1.GroupBy过程

首先看看分组聚合的过程,主要包括拆分(split)、应用(Apply)和合并(Combine)

2.创建DataFrame

import pandas as pd

ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',

'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],

'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],

'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],

'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}

df = pd.DataFrame(ipl_data)

df1

2

3

4

5

6

7

8

3.将df按照Team列分组

分组之后的grouped是个DataFrameGroupBy对象

grouped = df.groupby('Team')

grouped1

2

4.查看df按照Team分组之后结果

按照不同的Team值来分组

grouped.groups1

5.分组后的结果对Points求和

grouped['Points'].sum()1

分组后常用操作包括:求和(sum)、平均值(mean)、计数(count)等等,如下图。

6.根据任意长度适当的数组分组

import numpy as np

key1 = np.array(list('abababbaaabb'))

df.groupby(key1).Team.count()1

2

3

7.对分组进行迭代

GroupBy分组产生的是一组二元元组,有分组名和数据块组成。即(分组名、数据块)。

for name,group in df.groupby('Team'):

print(name)

print(group)

print('*******分隔符*********')1

2

3

4

另外,对于多重建分组的情况,元组的第一个元素将是由元组组成。

即((分组名1,分组名2)、数据块)。

for (name1,name2),group in df.groupby(['Team','Rank']):

print(name1)

print(name2)

print(group)

print('*******分隔符*********')1

2

3

4

5

图片结果太长,只显示了部分。

8.在不同轴上分组

GroupBy默认是在axis=0轴上进行分组的,也可以在axis=1轴上进行分组聚合,不过用的相对较少。

df.dtypes1

grouped = df.groupby(df.dtypes, axis=1)

grouped.groups1

2

9.通过字典或Series进行分组

people = pd.DataFrame(np.random.randn(5, 5),

columns=['a', 'b', 'c', 'd', 'e'],

index=['Joe', 'Steve', 'Wes', 'Jim','Travis'])

people.iloc[2:3, [1, 2]] = np.nan

people1

2

3

4

5

根据字典聚合

mapping = {'a': 'red', 'b': 'red', 'c': 'blue',

'd': 'blue', 'e': 'red', 'f' : 'orange'}

by_column = people.groupby(mapping, axis=1)

by_column.sum()1

2

3

4

根据Series聚合

map_series = pd.Series(mapping)

people.groupby(map_series, axis=1).count()1

2

10.通过函数进行分组

people.groupby(len).sum()1

11.函数、数组、列表、字典、Series组合分组

key_list = ['one', 'one', 'one', 'two', 'two']

people.groupby([len, key_list]).min()1

2

12.根据索引级别分组

回到最初的DataFrame,给他重新定义成双层索引,并且给索引命名

df.columns = ([['a','a','a','b'],['Team', 'Rank', 'Year', 'Points']])

df.columns.names = ['one','two']

df1

2

3

之后对索引名为one的进行分组聚合

df.groupby(level='one',axis=1).count()1

12.多函数聚合

其中多函数聚合中也可以使用自定义函数。

df.columns = ['Team','Rank','Year','Points']

df.groupby('Team')['Points'].agg(['sum','mean','std'])1

2

13.apply:一般性的“拆分-应用-合并”

定义函数:

def top(df,n=2,column='Points'):

return df.sort_index(by=column,ascending=False)[:n]1

2

应用:

df.groupby('Team').apply(top)1

同时给apply函数传入参数:

df.groupby('Team').apply(top,n=3)1

欢迎添加个人微信号:liu2536036458。

想进入交流群的,备注:数据分析交流群

我们下次再见,如果还有下次的话!!!

欢迎关注微信公众号:516数据工作室

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值