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函数只能返回和数据一样行的数据,无法聚合。