数据分析—利用pandas进行数据分组

目标:
  • 学会利⽤pandas对数据进⾏分组
  • 知道如何提取分组后的数据
  • 可以按多列进⾏分组
  • 能够对分组后数据进⾏统计计算

测试数据集:
链接:https://pan.baidu.com/s/1QvY-Qvtl_8QtsMi8sxUD-w
提取码:di2z

一、数据的分组

在pandas当中我们可以利⽤groupby()方法对数据进行分组,返回的是一个分组后的对象, groupby()里面的参数是指定分组的列,分组也分为两种方式 :

①对所有数据进⾏分组
② 对指定列进⾏分组(只要指定列的数据)
下⾯我们来看⼀下这两种⽤法

1、对所有数据进⾏分组
import pandas as pd
df = pd.read_excel('C:/Users/cherich/Desktop/forbes_2018.xlsx')
groups = df.groupby('gender')
print(groups)
2、对指定列进⾏分组(只要指定列的数据)
# 根据gender列只对age列进行分组
group = df['age'].groupby(df['gender']) 
# 查看分组
print(group.groups)
# 根据分组后的名字选择分组
print(group.get_group('F'))
image.png
3、对多列进⾏分组
group=df.groupby(['country','gender']) 
print(group)

二、提取分组后的数据

1、由于分组后的数据返回的是⼀个对象,我们⽤遍历的⽅式才能提取出数据(为了大家看的清楚,截取了几行数据,演示效果)
groups = df.groupby('gender')
for group_name, group_df in groups:
    print(group_name, '+', group_df)

group_name是分组的名称 ,group_df对应的每组的数据


image.png
2、使⽤get_group()⽅法获取某⼀组的数据
res = groups.get_group('F')
print(res)
image.png

其中括号中的参数 F为分组名称

3、我们还可以使⽤另⼀种遍历的⽅式来获取分组后数据的数量
group = df.groupby('gender')
for gender,value in group.size().items():
    print(gender,value)
  • group.size()会返回分组后数据对应的数量
  • group.size().items()则是打包成zip对象,包括分组名称以及数量
    各个变量的含义:
    gender 遍历出来的分组名称
    value 每组对应数据的数量


    image.png

三、对分组后的数据进⾏统计

pandas给我们提供了很多的统计函数,我们可以直接拿来使⽤

count() 统计列表中⾮空数据的个数 
nunique() 统计⾮重复的数据的个数 
unique() 打印出⾮重复的数据本身
sum() 统计列表中的所有数值的和 
mean() 统计列表中的数据的平均值 
median() 计算列表中数据的中位数 
max() 计算列表中数据的最⼤值 
min() 计算列表中数据的最⼩值
# 获取F组的数据
f_group = groups.get_group('F')
# 获取平均值
f_mean = f_group['age'].mean()
# 获取最大值
f_max = f_group['age'].max()
# 获取最小值
f_min = f_group['age'].min()
print(f_mean,f_max,f_min)

结果:60.470588235294116 94 21

上⾯的⽅式我们⼀次只能计算⼀个数据,那么pandas还给我们提供了⼀个⽅法,可以同时进 ⾏多个运算

  • agg() 我们只需将函数的名字以字符串的形势存储到列表中作为agg的参数即可
for group_name,group_df in groups: 
    f_se = group_df['age'].agg(['max','min','mean'])
    print('{}组的最大年龄是{},最小年龄是{},平均年龄是{}'.format(group_name,f_se[0],f_se[1],f_se[2]))
image.png

各个变量的含义

  • f_se------------------统计结果
  • group_name------分组名称
  • f_se[0]--------------最⼤值
  • f_se[1]--------------最⼩值
  • f_se[2]--------------平均值

你可能感兴趣的:(数据分析—利用pandas进行数据分组)