2021-04-06 python数据处理系统学习(二十)分组聚合

本文介绍了Python使用pandas库进行数据处理时的分组聚合操作,包括描述性统计(如最小值、中位数、最大值、百分位数和describe函数)、groupby函数的应用(如分组计算、计数、累计计数和描述性统计),以及agg函数和apply函数在聚合统计中的应用。内容涵盖了数据的统计分析和分组操作,为数据分析提供基础工具。
摘要由CSDN通过智能技术生成

2021-04-06 python数据处理系统学习(二十)分组聚合

导入数据:

import pandas as pd
import numpy as np
import os
os.chdir(r'C:\Users\wangyu\Desktop\毕业论文')

data1=pd.read_excel('最终data.xlsx',sheet_name=0,header=0)

data1
Out[3]: 
                  有效发票率  企业的盈利能力(年度平均利润)  ...  进项有效合作单位数量  销项有效合作单位数量
    信誉评级和违约记录                             ...                        
1   100        0.963986    -1.939309e+09  ...         435         351
2   100        0.960703     4.638077e+08  ...        3623        1567
3   60         0.979779     6.068909e+08  ...         570         135
4   60         0.918609     1.891956e+09  ...         131          26
5   80         0.956643     5.958721e+06  ...         390          33
                ...              ...  ...         ...         ...
119 40         0.988095    -2.129928e+05  ...          17          14
120 40         0.676923     1.769471e+05  ...          16           6
121 40         0.902542    -1.136832e+06  ...          11         116
122 40         0.897590     6.994340e+03  ...          21          64
123 40         0.529412     2.267197e+05  ...           2           5

[123 rows x 9 columns]

1、描述性概述

1.1 求每列最小值

var_name=['信誉评级和违约记录','企业的盈利能力(年度平均利润)','进项有效合作单位数量','销项有效合作单位数量']
np.min(data1[var_name],axis=0)
Out[14]: 
信誉评级和违约记录          4.000000e+01
企业的盈利能力(年度平均利润)   -1.939309e+09
进项有效合作单位数量         1.000000e+00
销项有效合作单位数量         1.000000e+00
dtype: float64

也可以通过python自带的函数实现:

data1[var_name].min(axis=0)
Out[17]: 
信誉评级和违约记录          4.000000e+01
企业的盈利能力(年度平均利润)   -1.939309e+09
进项有效合作单位数量         1.000000e+00
销项有效合作单位数量         1.000000e+00
dtype: float64

1.2 求每列中位数

np.median(data1[var_name],axis=0)
Out[15]: array([8.00000000e+01, 3.74514463e+06, 7.60000000e+01, 3.70000000e+01])

1.3 求每列最大值

np.max(data1[var_name],axis=0)
Out[16]: 
信誉评级和违约记录          1.000000e+02
企业的盈利能力(年度平均利润)    1.891956e+09
进项有效合作单位数量         3.623000e+03
销项有效合作单位数量         7.484000e+03
dtype: float64

1.4 求百分位数

data1[var_name].quantile([0,0.4,0.8,1])
Out[18]: 
     信誉评级和违约记录  企业的盈利能力(年度平均利润)  进项有效合作单位数量  销项有效合作单位数量
0.0       40.0    -1.939309e+09         1.0         1.0
0.4       60.0     2.290138e+06        54.0        25.0
0.8      100.0     3.331546e+07       383.6       147.4
1.0      100.0     1.891956e+09      3623.0      7484.0

1.5 describe函数

对全员进行描述性分析:

data1.describe()
Out[4]: 
       Unnamed: 0   信誉评级和违约记录  ...   进项有效合作单位数量   销项有效合作单位数量
count  123.000000  123.000000  ...   123.000000   123.000000
mean    62.000000   70.813008  ...   242.097561   219.674797
std     35.651087   20.944638  ...   468.485464   785.596792
min      1.000000   40.000000  ...     1.000000     1.000000
25%     31.500000   60.000000  ...    21.000000    13.000000
50%     62.000000   80.000000  ...    76.000000    37.000000
75%     92.500000   80.000000  ...   276.000000   118.000000
max    123.000000  100.000000  ...  3623.000000  7484.000000

[8 rows x 11 columns]

对某几个指标进行描述性分析:

data1[var_name].describe()
Out[5]: 
        信誉评级和违约记录  企业的盈利能力(年度平均利润)   进项有效合作单位数量   销项有效合作单位数量
count  123.000000     1.230000e+02   123.000000   123.000000
mean    70.813008     3.601341e+07   242.097561   219.674797
std     20.944638     2.642808e+08   468.485464   785.596792
min     40.000000    -1.939309e+09     1.000000     1.000000
25%     60.000000     5.346324e+05    21.000000    13.000000
50%     80.000000     3.745145e+06    76.000000    37.000000
75%     80.000000     2.182057e+07   276.000000   118.000000
max    100.000000     1.891956e+09  3623.000000  7484.000000

还可以用data1.describe(include=[object])函数统计字符型数据

2、 groupby函数

2.1 按照某一类进行分组:

groupde=data1.groupby('信誉评级和违约记录')

type(groupde)
Out[11]: pandas.core.groupby.generic.DataFrameGroupBy

groupde.median()
Out[12]: 
           Unnamed: 0     有效发票率  ...  进项有效合作单位数量  销项有效合作单位数量
信誉评级和违约记录                        ...                        
40              111.5  0.900066  ...        20.5        12.0
50               58.0  0.980240  ...        49.5         8.0
60               62.0  0.939019  ...        77.5        35.5
70               45.0  0.969730  ...       114.0        63.0
80               60.0  0.946003  ...       103.0        30.0
100              24.0  0.943703  ...       166.0       123.0

[6 rows x 10 columns]

2.2 计算每一类的数量

groupde.size()
Out[13]: 
信誉评级和违约记录
40     24
50      2
60     32
70      1
80     37
100    27
dtype: int64

2.3对每一类的数从0开始标记

groupde.cumcount()
Out[14]: 
0       0
1       1
2       0
3       1
4       0
       ..
118    19
119    20
120    21
121    22
122    23
Length: 123, dtype: int64

2.4 还可以对分组后的数进行描述性分析:

grouped=data1[var_name].groupby(by=['信誉评级和违约记录'])
grouped
Out[18]: <pandas.core.groupby.generic.DataFrameGroupBy object at 0x000002B5534E11C0>

grouped.median()
Out[19]: 
           企业的盈利能力(年度平均利润)  进项有效合作单位数量  销项有效合作单位数量
信誉评级和违约记录                                         
40            2.199741e+05        20.5        12.0
50            2.470577e+07        49.5         8.0
60            4.939807e+06        77.5        35.5
70            1.007575e+06       114.0        63.0
80            4.964494e+06       103.0        30.0
100           2.934705e+07       166.0       123.0

可以通过这个方法进行层次化索引

3、聚合函数agg

3.1 查看各类的各项描述性统计

grouped.agg([np.mean,np.sum])
Out[20]: 
          企业的盈利能力(年度平均利润)                进项有效合作单位数量         销项有效合作单位数量       
                     mean           sum        mean    sum        mean    sum
信誉评级和违约记录                                                                    
40           7.630176e+05  1.831242e+07   50.250000   1206   32.458333    779
50           2.470577e+07  4.941154e+07   49.500000     99    8.000000     16
60           8.982208e+07  2.874307e+09  202.281250   6473  341.718750  10935
70           1.007575e+06  1.007575e+06  114.000000    114   63.000000     63
80           2.325495e+07  8.604331e+08  185.945946   6880   78.324324   2898
100          2.319178e+07  6.261781e+08  555.777778  15006  456.629630  12329

3.2 通过索引找到想要的指标的描述性统计

grouped.agg([np.mean,np.sum]).loc[[80,100],['进项有效合作单位数量','销项有效合作单位数量']]
Out[23]: 
           进项有效合作单位数量         销项有效合作单位数量       
                 mean    sum        mean    sum
信誉评级和违约记录                                      
80         185.945946   6880   78.324324   2898
100        555.777778  15006  456.629630  12329

3.3 不同指标输出不同的描述性统计

输出进项有效合作单位数量的总和以及销项有效合作单位数量的平均值

grouped.agg({'进项有效合作单位数量':np.sum,'销项有效合作单位数量':np.mean})
Out[24]: 
           进项有效合作单位数量  销项有效合作单位数量
信誉评级和违约记录                        
40               1206   32.458333
50                 99    8.000000
60               6473  341.718750
70                114   63.000000
80               6880   78.324324
100             15006  456.629630

输出进项有效合作单位数量的总和以及销项有效合作单位数量的总和、平均值

grouped.agg({'进项有效合作单位数量':np.sum,'销项有效合作单位数量':[np.sum,np.mean]})
Out[25]: 
          进项有效合作单位数量 销项有效合作单位数量            
                 sum        sum        mean
信誉评级和违约记录                                  
40              1206        779   32.458333
50                99         16    8.000000
60              6473      10935  341.718750
70               114         63   63.000000
80              6880       2898   78.324324
100            15006      12329  456.629630

4、apply函数

data1[var_name].apply(np.sum,axis=0)
Out[27]: 
信誉评级和违约记录          8.710000e+03
企业的盈利能力(年度平均利润)    4.429649e+09
进项有效合作单位数量         2.977800e+04
销项有效合作单位数量         2.702000e+04
dtype: float64

transform函数只能返回和数据一样行的数据,无法聚合。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值