python pandas数据分组聚合

python pandas数据分组聚合

0 背景

上一篇我们已经完成了Pandas的分组对象的创建和一些操作,这个分组对象包含了数据的分组详情, 以及对这个分组对象进行各种操作,并获取相关信息。本节将着重介绍分组数据后的统计分析,这是分组聚合过程的最终步骤。通过对最终数据的审视和输出,我们能够观察到业务的变化趋势,从而充分体现数据的价值和意义。

1 使用

导入数据/创建分组对象

import numpy as np
import pandas as pd

data = {'A': ['aa''ab''bc''bc''ab''bc'],
        'B': [223585],
        'C': [0.21-1.08-0.020.680.780.23],
        'D': [-0.86-0.160.741.211.180.71],
        'E': [257248]}
df = pd.DataFrame(data)
df
    A  B     C     D  E
0  aa  2  0.21 -0.86  2
1  ab  2 -1.08 -0.16  5
2  bc  3 -0.02  0.74  7
3  bc  5  0.68  1.21  2
4  ab  8  0.78  1.18  4
5  bc  5  0.23  0.71  8
g = df.groupby('A')

描述性统计

# 描述性统计
g.describe()
# 由于结果过多,为便于观察,对结果进行转置
g.describe().T

# A          aa        ab        bc
# B count  1.00  2.000000  3.000000
#   mean   2.00  5.000000  4.333333
#   std     NaN  4.242641  1.154701
#   min    2.00  2.000000  3.000000
#   25%    2.00  3.500000  4.000000
#   50%    2.00  5.000000  5.000000
#   75%    2.00  6.500000  5.000000
#   max    2.00  8.000000  5.000000
# C count  1.00  2.000000  3.000000
#   mean   0.21 -0.150000  0.296667
#   std     NaN  1.315219  0.354730
#   min    0.21 -1.080000 -0.020000
#   25%    0.21 -0.615000  0.105000
#   50%    0.21 -0.150000  0.230000
#   75%    0.21  0.315000  0.455000
#   max    0.21  0.780000  0.680000
# D count  1.00  2.000000  3.000000
#   mean  -0.86  0.510000  0.886667
#   std     NaN  0.947523  0.280416
#   min   -0.86 -0.160000  0.710000
#   25%   -0.86  0.175000  0.725000
#   50%   -0.86  0.510000  0.740000
#   75%   -0.86  0.845000  0.975000
#   max   -0.86  1.180000  1.210000
# E count  1.00  2.000000  3.000000
#   mean   2.00  4.500000  5.666667
#   std     NaN  0.707107  3.214550
#   min    2.00  4.000000  2.000000
#   25%    2.00  4.250000  4.500000
#   50%    2.00  4.500000  7.000000
#   75%    2.00  4.750000  7.500000

统计函数

# 各组的平均值
g.mean()
# 描述性统计
g.describe()
# 求和
g.sum()
# 每组数量,不包括缺失值
g.count()
# 最大值
g.max()
# 最小值
g.min()
# 分组数量
g.size()
# 中位数
g.median()
# 标准差
g.std()
# 方差
g.var()
# 相关性系数
g.corr()
# 标准误差
g.sem()
# 乘积
g.prod()
# 每组的累计最大值
g.cummax()
# 累加
g.cumsum()
# 每组最大值、最小值所在的索引值
g.idxmax()
g.idxmin()

聚合方法agg()

聚合方法agg()是方法.aggregate() 的简写. 它的作用是将分组后的对象按照给定的统计方法运行,也支持按字段分别给定不同的统计方法运行。

g.aggregate('mean')
g.agg('mean')
g.agg(np.mean)

#            B         C         D         E
# A                                         
# aa  2.000000  0.210000 -0.860000  2.000000
# ab  5.000000 -0.150000  0.510000  4.500000
# bc  4.333333  0.296667  0.886667  5.666667
g['B'].agg('mean')

# A
# aa    2.000000
# ab    5.000000
# bc    4.333333
# Name: B, dtype: float64
g[['B''C']].agg(['mean', np.max, min])
# 可以通过多种形式获取各个字段的统计情况。

#            B                 C            
#         mean max min      mean   max   min
# A                                         
# aa  2.000000   2   2  0.210000  0.21  0.21
# ab  5.000000   8   2 -0.150000  0.78 -1.08
# bc  4.333333   5   3  0.296667  0.68 -0.02
# 不同列使用不同计算方法,且一个列用多个计算方法
g.agg({'B''mean''C': ['count''max''sum']})

#            B     C                    
#         mean count       max       sum
# A                                     
# aa  2.000000     1  0.209521  0.209521
# ab  5.000000     2  0.782076 -0.295344
# bc  4.333333     3  0.682054  0.948482

g.agg({'B''mean''C': ['count''max''sum']}).columns

# MultiIndex([('B',  'mean'),
#             ('C', 'count'),
#             ('C',   'max'),
#             ('C',   'sum')],
#            )

分组内首尾值

# 分组内首位值
g.first()

#     B     C     D  E
# A                   
# aa  2  0.21 -0.86  2
# ab  2 -1.08 -0.16  5
# bc  3 -0.02  0.74  7

# numeric_only参数指定是否仅含数字, 默认是False, min_count表示组内的数量最少是多少, 默认是-1, 不限制
g.first(numeric_only=True, min_count=2)

#       B     C     D    E
# A                       
# aa  NaN   NaN   NaN  NaN
# ab  2.0 -1.08 -0.16  5.0
# bc  3.0 -0.02  0.74  7.0


g.last()

#     B     C     D  E
# A                   
# aa  2  0.21 -0.86  2
# ab  8  0.78  1.18  4
# bc  5  0.23  0.71  8


g.last(numeric_only=True, min_count=3)

#       B     C     D    E
# A                       
# aa  NaN   NaN   NaN  NaN
# ab  NaN   NaN   NaN  NaN
# bc  5.0  0.23  0.71  8.0

组内分位数

# 组内分位数
g.median()

#       B     C     D    E
# A                       
# aa  2.0  0.21 -0.86  2.0
# ab  5.0 -0.15  0.51  4.5
# bc  5.0  0.23  0.74  7.0

# 二分位数, 等同于中位数. 
g.quantile()

#       B     C     D    E
# A                       
# aa  2.0  0.21 -0.86  2.0
# ab  5.0 -0.15  0.51  4.5
# bc  5.0  0.23  0.74  7.0

# n分位数, 设置参数q=0.5, 表示二分位数
g.quantile(0.5)

#       B     C     D    E
# A                       
# aa  2.0  0.21 -0.86  2.0
# ab  5.0 -0.15  0.51  4.5
# bc  5.0  0.23  0.74  7.0

组内差值

.diff() 是 pandas 中的一个方法,用于计算分组内元素的差异。当我们对一个分组对象调用 diff() 方法时,它会在每个分组内计算每个元素与前一个元素之间的差异。主要用于分析时间序列数据或需要比较分组内连续元素的情况。

# 组内差值
g.diff()

#      B     C     D    E
# 0  NaN   NaN   NaN  NaN
# 1  NaN   NaN   NaN  NaN
# 2  NaN   NaN   NaN  NaN
# 3  2.0  0.70  0.47 -5.0
# 4  6.0  1.86  1.34 -1.0
# 5  0.0 -0.45 -0.50  6.0

2 总结

groupby 函数可以简单的理解为为拆开数据、应用数据和合并数据。本文介绍的功能主要是将分组的结果最终统计并展示出来。因此我们需要掌握熟练使用agg()方法,它功能强大,是在我们今后的数据分析中主要的数据分组聚合工具。

欢迎关注我的微信公众号


原文始发于微信公众号(其之):python pandas数据分组聚合

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/204769.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!