【Pandas分组聚合】 groupby()、agg() 方法的使用

Pandas分组聚合

创建一个dataframe结构

import pandas as pd

df = pd.DataFrame(
    data={
        'name': ['z_s', 'l_s', 'w_w', 'z_l', 'y_s', 'j_j', 'l_b', 'z_f', 'hs_q', 'lbl_k', 'qy_n', 'mg_n'],
        'score': [100, 97, 98, 89, 67, 59, 29, 87, 78, 89, 88, 80],
        'group': [1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2],
        'cls': ['A', 'A', 'A', 'B', 'B', 'B', 'A', 'A', 'A', 'B', 'B', 'B'],
        'height': [178.0, 180.0, 176.0, 182.0, 189.0, 190.0, 172.5, 175.0, 165.0, 160.0, 158.5, 159.0]
    },
    index=['stu_' + str(i) for i in np.arange(1, 13, 1)]
)
print('df:\n', df)

【Pandas分组聚合】 groupby()、agg() 方法的使用

分组函数 groupby()

初识分组聚合

我们可以通过DataFrame.groupby(by=[“column”]) 方法对数据进行分组,再根据需求进行 聚合操作。

统计各个班的最高的成绩:


ret = df.groupby(by=['cls'])['score'].max().reset_index()
print('ret:\n', ret)

【Pandas分组聚合】 groupby()、agg() 方法的使用
分开来看就是:
ret = df.groupby(by=['cls'])
print(ret)
ret = ret['score']
print(ret)
ret = ret.max()
print(ret)
"""
cls
A    100
B     89
Name: score, dtype: int64
"""
ret = ret.reset_index()
print(ret)
"""
  cls  score
0   A    100
1   B     89
"""

多重行索引分组聚合

统计各个班的各个小组的最高成绩


ret = df.groupby(by=['cls', 'group'])['score'].max()
print('ret:\n', ret)
print('index:\n', ret.index)
ret = ret.reset_index()
print(ret)

【Pandas分组聚合】 groupby()、agg() 方法的使用

对多列数据进行分组聚合

统计各个班级的成绩、身高的平均值:


ret = df.groupby(by=['cls'])[['score', 'height']].mean().reset_index()
print('ret:\n', ret)

【Pandas分组聚合】 groupby()、agg() 方法的使用

综合应用

统计各个班级、各个小组的成绩、身高的平均值


ret = df.groupby(by=['cls', 'group'])[['score', 'height']].mean().reset_index()
print('ret:\n', ret)

【Pandas分组聚合】 groupby()、agg() 方法的使用

聚合函数 agg(aggregate)

在Pandas中, aggaggregate两个函数指向同一个方法,使用时写任意一个即可。

求 多列数据 的 多个指标

统计成绩、身高的最大值、均值


ret = df.loc[:, ['score', 'height']].agg([np.max, np.mean])
print('ret:\n', ret)

【Pandas分组聚合】 groupby()、agg() 方法的使用

对多列数据统计不同的指标

统计成绩的均值、同时统计身高的最大值

ret = df.agg({'score': [np.mean], 'height': [np.max]})
print('ret:\n',ret)

【Pandas分组聚合】 groupby()、agg() 方法的使用

对多列数据统计不同个数的指标

统计成绩的均值、最大值、中位数 和 身高的均值

ret = df.agg({'score': [np.mean, np.max, np.median], 'height': [np.mean]})
print('ret:\n', ret)

【Pandas分组聚合】 groupby()、agg() 方法的使用

使用agg 方法也可以配合着 分组 对不同列、不同的数据、统计不同个数的 不同指标!

ret = df.groupby(by=['cls']).agg({'height': [np.max,np.mean], 'score': [np.min]})
print('ret:\n', ret)

【Pandas分组聚合】 groupby()、agg() 方法的使用

agg调用 自定义函数

ret = df.loc[:, 'score'].agg(lambda x: x + 1)
print('ret1:\n', ret)

def func_add_one(x):
    return x + 1

ret = df.loc[:, 'score'].agg(func_add_one)
print('ret2:\n', ret)

ret = df.loc[:, ['score', 'height']].agg(func_add_one)
print('ret3:\n', ret)

【Pandas分组聚合】 groupby()、agg() 方法的使用

使用agg 调用numpy的统计指标


ret = df.loc[:, 'score'].agg(np.sum)
print('ret:\n',ret)
print('type:\n',type(ret))

ret = df.loc[:, ['score', 'height']].agg(np.sum)
print('ret:\n', ret)
print('type:\n',type(ret))

ret = df.loc[:, ['score', 'height']].agg(np.sum, axis=1)
print('ret:\n', ret)
print('type:\n',type(ret))

【Pandas分组聚合】 groupby()、agg() 方法的使用

除了以上方法之外,还可以使用自定义方法聚合,可以参见我的这篇文章:Pandas使用自定义方法

Original: https://blog.csdn.net/weixin_45760274/article/details/123511623
Author: 胡桃の壶
Title: 【Pandas分组聚合】 groupby()、agg() 方法的使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/671134/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球