Pandas函数之统计函数

基本统计函数

函数描述
sum()所有值的和,默认对列操作
count()非空的数量,默认对列操作
mean()平均值,默认对列操作
median()中位数,默认对列操作
std()标准差,默认对列操作
max()最大值,默认对列操作
min()最小值,默认对列操作
describe()描述性信息,默认对数值型的数据操作
size计数,默认对列操作
var()方差,默认对列操作
info()返回数据集的基础信息,每一列数量统计,哪些列有缺失值,数据类型等
import pandas as pd
student = {
    '学号':['001','002','003','004','005','006','007','008','009','010'],
    '语文':[103,99,111,87,121,132,114,100,107,101],
    '数学':[88,92,145,78,111,120,66,99,112,103],
    '英语':[127,100,99,46,68,98,88,111,102,93],
    '理综':[203,199,236,198,222,276,183,193,231,173]
}
# 不显示科学计数法,小数点后保留两位小数
pd.set_option('display.float_format', lambda x: '%.2f' % x)
df = pd.DataFrame(student)
学号语文数学英语理综
000110388127203
10029992100199
200311114599236
3004877846198
400512111168222
500613212098276
60071146688183
700810099111193
8009107112102231
901010110393173
# 每一列求和,过滤学号那一列
df.iloc[:,1:].sum()
语文    1075
数学    1014
英语     932
理综    2114
dtype: int64
# 每一行求和
df.iloc[:,1:].sum(axis=1
0    521
1    490
2    591
3    409
4    522
5    626
6    451
7    503
8    552
9    470
dtype: int64
# 新增一列总分
df['总分'] = df.iloc[:,1:].sum(axis=1)
学号语文数学英语理综总分
000110388127203521
10029992100199490
200311114599236591
3004877846198409
400512111168222522
500613212098276626
60071146688183451
700810099111193503
8009107112102231552
901010110393173470
# 描述性信息,默认针对数值型数据 
df.describe()
语文数学英语理综总分
count10.0010.0010.0010.0010.00
mean107.50101.4093.20211.40513.50
std12.6922.4322.4330.3764.68
min87.0066.0046.00173.00409.00
25%100.2589.0089.25194.25475.00
50%105.00101.0098.50201.00512.00
75%113.25111.75101.50228.75544.50
max132.00145.00127.00276.00626.00
# 统计object类型的信息
df.describe(include='object')
学号
count10
unique10
top007
freq1

高级统计函数

部分一
函数描述
cov()协方差
corr()相关系数(皮尔森系数)
rank()排名
value_counts()统计频次,只能作用于Series
quantile分位数(0.5表示中位数)
skew()偏度
kurt()峰度
groupby()分组
aggregate()或agg()聚合运算

关于偏度与峰度,请点击查看

arr_str = {
    'A': ['a', 'b', 'c', 'a', 'a', 'b'],
    'B':[1, 2, 4, 7, 2, 8],
    'C':['f','f','m','f','m','m']
}
df = pd.DataFrame(arr_str)
ABC
0a1f
1b2f
2c4m
3a7f
4a2m
5b8m
  • 分组groupy()
"""
groupby()表示按某一列或多列进行分组
"""
# 返回DataFrameGropyBy的对象
df.groupby('A')
# 返回SeriesGroupBy的对象
df.groupby('A')['B']
# 返回分组后的平均值
df.groupby('A')['B'].mean()

Out[99]:
A
a   3.33
b   5.00
c   4.00
Name: B, dtype: float64
# 统计个数
df.groupby('A')['B'].size()

Out[104]:
A
a    3
b    2
c    1
Name: B, dtype: int64
# 统计频次
df.groupby('A')['B'].value_counts()

Out[121]:
A  B
a  1    1
   2    1
   7    1
b  2    1
   8    1
c  4    1
Name: B, dtype: int64
# groupby后的数据为series类型,若要保持DataFrame,请使用as_index参数
df.groupby('A', as_index=False)['B'].value_counts()
	A	B
0	a	3.33
1	b	5.00
2	c	4.00
# 统计频次分布
df.groupby('A')['B'].value_counts().unstack()
B12478
A
a1.001.00nan1.00nan
bnan1.00nannan1.00
cnannan1.00nannan
  • 聚合aggregate()
"""
aggregate()或者简写成agg()表示聚合操作,
传入的参数可以为:函数,函数列表,字典
"""
# 传入匿名函数,返回分组后的最大值
df.groupby('A').agg(lambda x: np.max(x))

Out[129]:
	B	C
A
a	7	m
b	8	m
c	4	m
# 传入函数列表
df.groupby('A').agg([np.max, np.min, np.mean])

Out[135]:
	B	C
A	
a	7	m	
b	8	m
c	4	m
# 传入字典
df.groupby('A').agg({'B':np.mean,'C':np.max})

Out[138]:
	B		C
A
a	3.33	m
b	5.00	m
c	4.00	m
部分二
函数描述
idxmin()最小值所在的位置,只能作用于Series
idxmax()最大值所在的位置,只能作用于Series
any()逻辑或
all()逻辑与
pct_change()表示与前一个数据相差的百分比,针对数值型的数据
cumsum()累计和
cumprod()累计积
unique()统计不重复的数据,只能作用于Series
sort_index()按索引排序
sort_values()按值排序,只能作用于Series
# 返回最大值所在位置
df1['B'].idxmax()

Out[160]:
5
# 返回累计和
df1.cumsum()

Out[162]:
	A		B		C
0	a		1		f
1	ab		3		ff
2	abc		7		ffm
3	abca	14		ffmf
4	abcaa	16		ffmfm
5	abcaab	24		ffmfmm

# 返回一个数组
df1['A'].unique()

Out[32]:
array(['a', 'b', 'c'], dtype=object)
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值