Pandas(七):分组聚合groupby

文章目录

  • 一、什么是分组?
  • 二、分组并使用聚合函数做数据统计
    • 1.创建数据
    • 2.单个列groupby,查询所有数据列的统计
    • 3.多个列groupby,查询所有数据列的统计
    • 4.同时查看多种数据统计
    • 5.不同列使用不同的聚合函数
  • 三、分组后的遍历
    • 1.创建数据
    • 2.遍历单个列聚合的分组
    • 3.遍历多个列聚合的分组

一、什么是分组?

类似SQL:

select city,max(temperature) from city_weather group by city;

groupby:先对数据分组,然后在每个分组上应用聚合函数、转换函数(例如sum、mean等函数)

二、分组并使用聚合函数做数据统计

1.创建数据

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
                   'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
                   'C': np.random.randn(8),
                   'D': np.random.randn(8)})

print(df)

Pandas(七):分组聚合groupby_第1张图片

2.单个列groupby,查询所有数据列的统计

将A分组,求和

df.groupby('A').sum()

Pandas(七):分组聚合groupby_第2张图片

  • groupby中的’A’变成了数据的索引列
  • 因为要统计sum,但B列不是数字,所以被自动忽略掉

3.多个列groupby,查询所有数据列的统计

将AB列分组,求平均数

df.groupby(['A','B']).mean()

Pandas(七):分组聚合groupby_第3张图片
我们看到:(‘A’,‘B’)成对变成了二级索引,加入 as_index=False参数取消AB索引

df.groupby(['A','B'], as_index=False).mean()

Pandas(七):分组聚合groupby_第4张图片

4.同时查看多种数据统计

对A分组,然后分别求和,平均数和标准差

df.groupby('A').agg([np.sum, np.mean, np.std])

Pandas(七):分组聚合groupby_第5张图片
我们看到有C和D两组数据的三个数据统计,倘若我们只查看C或者D的数据

# 方法1:预过滤,性能更好
df.groupby('A')['C'].agg([np.sum, np.mean, np.std])
# 方法2
df.groupby('A').agg([np.sum, np.mean, np.std])['C']

Pandas(七):分组聚合groupby_第6张图片

5.不同列使用不同的聚合函数

对A分组,求C的和,D的平均值

df.groupby('A').agg({"C":np.sum, "D":np.mean})

Pandas(七):分组聚合groupby_第7张图片


三、分组后的遍历

for循环可以直接遍历每个group

1.创建数据

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
                   'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
                   'C': np.random.randn(8),
                   'D': np.random.randn(8)})

Pandas(七):分组聚合groupby_第8张图片

2.遍历单个列聚合的分组

①对A分组,进行遍历

g = df.groupby('A')  # g= 
for name, group in g:
    print(name)
    print(group)
    print()

Pandas(七):分组聚合groupby_第9张图片
我们可以看到大概流程,先分组,分组了一项后,就会对该项进行统计。
②获取单个分组的数据

g.get_group('bar')

Pandas(七):分组聚合groupby_第10张图片

3.遍历多个列聚合的分组

①对AB分组,进行遍历

g = df.groupby(['A', 'B'])
for name,group in g:
    print(name)
    print(group)
    print()

Pandas(七):分组聚合groupby_第11张图片
可以看到,name是一个2个元素的tuple,代表不同的列

②获取单个分组的数据

g.get_group(('foo', 'one'))

在这里插入图片描述
③可以直接查询group后的某几列,生成Series或者子DataFrame

g = df.groupby(['A', 'B'])
# print(g['C'])  #g['C']=
for name, group in g['C']:
    print(name)
    print(group)
    print(type(group))
    print()

Pandas(七):分组聚合groupby_第12张图片

你可能感兴趣的:(数据分析)