2.3 pandas:汇总和计算描述统计(统计上的方法)
2.3 汇总和计算描述统计
import numpy as np
import pandas as pd
df = pd.DataFrame([[1.4, np.nan],[7.1,-4.5],[np.nan, np.nan],[0.75,-1.3]],index=list('abcd'),columns=['one','two'])
df
one | two | |
---|---|---|
a | 1.40 | NaN |
b | 7.10 | -4.5 |
c | NaN | NaN |
d | 0.75 | -1.3 |
描述和汇总统计的一些方法
sum()
df.sum() #默认求列
one 9.25
two -5.80
dtype: float64
df.sum(axis='columns')
a 1.40
b 2.60
c 0.00
d -0.55
dtype: float64
NA值会⾃动被排除,除⾮整个切⽚(这⾥指的是⾏或列)都是NA,可以通过skipna禁用(skip NA)
mean
df.mean(axis=1) #a行排除了NA,所以是1.40/1=1.40
a 1.400
b 1.300
c NaN
d -0.275
dtype: float64
df.mean(axis=1,skipna=False)
a NaN
b 1.300
c NaN
d -0.275
dtype: float64
约简型:idxmin/idxmax
- 返回的是索引
df.idxmax()
one b
two d
dtype: object
df.idxmin()
one d
two b
dtype: object
累计型函数
df.cumsum() #默认是列
one | two | |
---|---|---|
a | 1.40 | NaN |
b | 8.50 | -4.5 |
c | NaN | NaN |
d | 9.25 | -5.8 |
df.cummax() #默认是列,不断更新到当前行的最小值
one | two | |
---|---|---|
a | 1.4 | NaN |
b | 7.1 | -4.5 |
c | NaN | NaN |
d | 7.1 | -1.3 |
df.cummin() #默认是列,不断更新到当前行的最大值
one | two | |
---|---|---|
a | 1.40 | NaN |
b | 1.40 | -4.5 |
c | NaN | NaN |
d | 0.75 | -4.5 |
df.cumprod() #默认是列,累乘
one | two | |
---|---|---|
a | 1.400 | NaN |
b | 9.940 | -4.50 |
c | NaN | NaN |
d | 7.455 | 5.85 |
汇总统计:describe
#对于数值型数据
df.describe()
one | two | |
---|---|---|
count | 3.000000 | 2.000000 |
mean | 3.083333 | -2.900000 |
std | 3.493685 | 2.262742 |
min | 0.750000 | -4.500000 |
25% | 1.075000 | -3.700000 |
50% | 1.400000 | -2.900000 |
75% | 4.250000 | -2.100000 |
max | 7.100000 | -1.300000 |
obj = pd.Series(['a','a','b','c']*4)
obj
0 a
1 a
2 b
3 c
4 a
5 a
6 b
7 c
8 a
9 a
10 b
11 c
12 a
13 a
14 b
15 c
dtype: object
#非数值型数据
obj.describe()
count 16
unique 3
top a
freq 8
dtype: object
总结:描述和汇总统计
方法 | 说明 |
---|---|
count | 非NA值的总数 |
describe | 针对Series和DataFrame列计算汇总统计 |
min,max | 最小值和最大值 |
argmin, argmax | 索引位置 |
idxmin, idxmax | 索引值 |
quantile | 计算样本的分位数(0到1) |
sum | 值的总和 |
mean | 值的平均数 |
median | 值的算数中位数 |
mad | 根据平均值计算平均绝对离差 |
var | 样本值的方差 |
std | 样本值的标准差 |
skew | 样本值的偏度(三阶矩) |
kurt | 样本值的峰度(四阶矩) |
cumsum | 累计和 |
cumprod | 累计积 |
cummin,cummax | 样本值的累计最大值和累计最小值 |
diff | 计算一阶差分(对时间序列很有用) |
pct_change | 计算百分数变化 |
相关系数与协方差
import pandas_datareader.data as web #直接pip install pandas-datareader
all_data = {ticker: web.get_data_yahoo(ticker) for ticker in ['AAPL','IBM','MSFT','GOOG']}
all_data
{'AAPL': High Low Open Close Volume \Date 2015-10-26 29.532499 28.730000 29.520000 28.820000 265335200.0 2015-10-27 29.135000 28.497499 28.850000 28.637501 279537600.0 2015-10-28 29.825001 29.014999 29.232500 29.817499 342205600.0 2015-10-29 30.172501 29.567499 29.674999 30.132500 204909200.0 2015-10-30 30.305000 29.862499 30.247499 29.875000 197461200.0 ... ... ... ... ... ... 2020-10-19 120.419998 115.660004 119.959999 115.980003 120639300.0 2020-10-20 118.980003 115.629997 116.199997 117.510002 124423700.0 2020-10-21 118.709999 116.449997 116.669998 116.870003 89946000.0 2020-10-22 118.040001 114.589996 117.449997 115.750000 101988000.0 2020-10-23 116.550003 114.279999 116.389999 115.040001 82396600.0 Adj Close Date 2015-10-26 26.632969 2015-10-27 26.464319 2015-10-28 27.554773 2015-10-29 27.845867 2015-10-30 27.607912 ... ... 2020-10-19 115.980003 2020-10-20 117.510002 2020-10-21 116.870003 2020-10-22 115.750000 2020-10-23 115.040001 [1259 rows x 6 columns],'IBM': High Low Open Close Volume \Date 2015-10-26 145.000000 143.210007 144.750000 143.660004 3489400.0 2015-10-27 143.830002 137.330002 143.509995 137.860001 15008500.0 2015-10-28 141.229996 137.500000 137.919998 140.830002 8511400.0 2015-10-29 140.820007 139.020004 140.360001 140.550003 3710400.0 2015-10-30 141.330002 139.899994 140.440002 140.080002 3984000.0 ... ... ... ... ... ... 2020-10-19 127.349998 125.080002 126.800003 125.519997 7478700.0 2020-10-20 120.150002 116.839996 119.800003 117.370003 21501100.0 2020-10-21 117.690002 114.790001 116.660004 115.059998 9755300.0 2020-10-22 116.059998 112.980003 115.000000 115.760002 7855800.0 2020-10-23 116.620003 115.529999 116.500000 116.000000 3890800.0 Adj Close Date 2015-10-26 115.042992 2015-10-27 110.398384 2015-10-28 112.776749 2015-10-29 112.552536 2015-10-30 112.176132 ... ... 2020-10-19 125.519997 2020-10-20 117.370003 2020-10-21 115.059998 2020-10-22 115.760002 2020-10-23 116.000000 [1259 rows x 6 columns],'MSFT': High Low Open Close Volume \Date 2015-10-26 54.320000 52.500000 52.529999 54.250000 64633300.0 2015-10-27 54.369999 53.580002 53.990002 53.689999 50999900.0 2015-10-28 53.980000 52.860001 53.540001 53.980000 47000800.0 2015-10-29 53.830002 53.220001 53.540001 53.360001 30202100.0 2015-10-30 53.990002 52.619999 53.320000 52.639999 46619800.0 ... ... ... ... ... ... 2020-10-19 222.300003 213.720001 220.419998 214.220001 27625800.0 2020-10-20 217.369995 213.089996 215.800003 214.649994 22753500.0 2020-10-21 216.919998 213.119995 213.119995 214.800003 22724900.0 2020-10-22 216.059998 211.699997 213.929993 214.889999 22351500.0 2020-10-23 216.279999 213.160004 215.029999 216.229996 18841600.0 Adj Close Date 2015-10-26 49.302139 2015-10-27 48.793213 2015-10-28 49.056763 2015-10-29 48.493317 2015-10-30 47.838978 ... ... 2020-10-19 214.220001 2020-10-20 214.649994 2020-10-21 214.800003 2020-10-22 214.889999 2020-10-23 216.229996 [1259 rows x 6 columns],'GOOG': High Low Open Close Volume \Date 2015-10-26 719.150024 701.260010 701.549988 712.780029 2716600 2015-10-27 713.619995 704.549988 707.380005 708.489990 2245800 2015-10-28 712.979980 703.080017 707.330017 712.950012 2178900 2015-10-29 718.260010 710.010010 710.500000 716.919983 1456000 2015-10-30 718.000000 710.049988 715.729980 710.809998 1908800 ... ... ... ... ... ... 2020-10-19 1588.150024 1528.000000 1580.459961 1534.609985 1607100 2020-10-20 1577.500000 1525.670044 1527.050049 1555.930054 2241700 2020-10-21 1618.729980 1571.630005 1573.329956 1593.310059 2568300 2020-10-22 1621.989990 1585.000000 1593.050049 1615.329956 1433600 2020-10-23 1642.359985 1620.510010 1626.069946 1641.000000 1375200 Adj Close Date 2015-10-26 712.780029 2015-10-27 708.489990 2015-10-28 712.950012 2015-10-29 716.919983 2015-10-30 710.809998 ... ... 2020-10-19 1534.609985 2020-10-20 1555.930054 2020-10-21 1593.310059 2020-10-22 1615.329956 2020-10-23 1641.000000 [1259 rows x 6 columns]}
price = pd.DataFrame({ticker:data['Adj Close'] for ticker, data in all_data.items()})
volumn = pd.DataFrame({ticker: data['Volume'] for ticker, data in all_data.items()})
price
AAPL | IBM | MSFT | GOOG | |
---|---|---|---|---|
Date | ||||
2015-10-26 | 26.632969 | 115.042992 | 49.302139 | 712.780029 |
2015-10-27 | 26.464319 | 110.398384 | 48.793213 | 708.489990 |
2015-10-28 | 27.554773 | 112.776749 | 49.056763 | 712.950012 |
2015-10-29 | 27.845867 | 112.552536 | 48.493317 | 716.919983 |
2015-10-30 | 27.607912 | 112.176132 | 47.838978 | 710.809998 |
... | ... | ... | ... | ... |
2020-10-19 | 115.980003 | 125.519997 | 214.220001 | 1534.609985 |
2020-10-20 | 117.510002 | 117.370003 | 214.649994 | 1555.930054 |
2020-10-21 | 116.870003 | 115.059998 | 214.800003 | 1593.310059 |
2020-10-22 | 115.750000 | 115.760002 | 214.889999 | 1615.329956 |
2020-10-23 | 115.040001 | 116.000000 | 216.229996 | 1641.000000 |
1259 rows × 4 columns
volumn
AAPL | IBM | MSFT | GOOG | |
---|---|---|---|---|
Date | ||||
2015-10-26 | 265335200.0 | 3489400.0 | 64633300.0 | 2716600 |
2015-10-27 | 279537600.0 | 15008500.0 | 50999900.0 | 2245800 |
2015-10-28 | 342205600.0 | 8511400.0 | 47000800.0 | 2178900 |
2015-10-29 | 204909200.0 | 3710400.0 | 30202100.0 | 1456000 |
2015-10-30 | 197461200.0 | 3984000.0 | 46619800.0 | 1908800 |
... | ... | ... | ... | ... |
2020-10-19 | 120639300.0 | 7478700.0 | 27625800.0 | 1607100 |
2020-10-20 | 124423700.0 | 21501100.0 | 22753500.0 | 2241700 |
2020-10-21 | 89946000.0 | 9755300.0 | 22724900.0 | 2568300 |
2020-10-22 | 101988000.0 | 7855800.0 | 22351500.0 | 1433600 |
2020-10-23 | 82396600.0 | 3890800.0 | 18841600.0 | 1375200 |
1259 rows × 4 columns
计算价格百分数变化
returns = price.pct_change()
returns.tail()
AAPL | IBM | MSFT | GOOG | |
---|---|---|---|---|
Date | ||||
2020-10-19 | -0.025542 | -0.003256 | -0.024766 | -0.024412 |
2020-10-20 | 0.013192 | -0.064930 | 0.002007 | 0.013893 |
2020-10-21 | -0.005446 | -0.019681 | 0.000699 | 0.024024 |
2020-10-22 | -0.009583 | 0.006084 | 0.000419 | 0.013820 |
2020-10-23 | -0.006134 | 0.002073 | 0.006236 | 0.015892 |
corr(相关系数)和cov(协方差)
returns.MSFT.corr(returns.IBM)
0.5721816449554378
returns.corr()
AAPL | IBM | MSFT | GOOG | |
---|---|---|---|---|
AAPL | 1.000000 | 0.490404 | 0.716144 | 0.660741 |
IBM | 0.490404 | 1.000000 | 0.572182 | 0.525325 |
MSFT | 0.716144 | 0.572182 | 1.000000 | 0.780281 |
GOOG | 0.660741 | 0.525325 | 0.780281 | 1.000000 |
returns.cov()
AAPL | IBM | MSFT | GOOG | |
---|---|---|---|---|
AAPL | 0.000355 | 0.000149 | 0.000234 | 0.000205 |
IBM | 0.000149 | 0.000260 | 0.000160 | 0.000139 |
MSFT | 0.000234 | 0.000160 | 0.000301 | 0.000222 |
GOOG | 0.000205 | 0.000139 | 0.000222 | 0.000270 |
returns.corrwith(returns.IBM)
AAPL 0.490404
IBM 1.000000
MSFT 0.572182
GOOG 0.525325
dtype: float64
returns.corrwith(returns.IBM, axis=1) #axis=1可以按行计算
Date
2015-10-26 NaN
2015-10-27 NaN
2015-10-28 NaN
2015-10-29 NaN
2015-10-30 NaN..
2020-10-19 NaN
2020-10-20 NaN
2020-10-21 NaN
2020-10-22 NaN
2020-10-23 NaN
Length: 1259, dtype: float64
唯一值、值计数以及成员资格
obj = pd.Series(['c','a','d','a','a','b','b','c','c'])
unique()
uniques = obj.unique() #记得之前有提到过了,提取单一元素出来
uniques
array(['c', 'a', 'd', 'b'], dtype=object)
value_counts()
- 按value的出现次数多少降序排序
obj.value_counts()
a 3
c 3
b 2
d 1
dtype: int64
pd.value_counts(obj.values,sort=False)
b 2
c 3
a 3
d 1
dtype: int64
isin
- 如果元素在内,则该位置标记为True,否则为False
- 可用来筛选出我们要的子集
obj
0 c
1 a
2 d
3 a
4 a
5 b
6 b
7 c
8 c
dtype: object
mask = obj.isin(['b','c'])
mask
0 True
1 False
2 False
3 False
4 False
5 True
6 True
7 True
8 True
dtype: bool
obj[mask]
0 c
5 b
6 b
7 c
8 c
dtype: object
Index.get_indexer
original = pd.Series(['c','a','b','b','c','a'])
uniques = pd.Series(['c','a','b'])
pd.Index(uniques).get_indexer(original)
array([0, 1, 2, 2, 0, 1], dtype=int64)
data = pd.DataFrame({'Qu1':[1,3,4,3,4],'Qu2':[2,3,1,2,3],'Qu3':[1,5,2,4,4]})
data
Qu1 | Qu2 | Qu3 | |
---|---|---|---|
0 | 1 | 2 | 1 |
1 | 3 | 3 | 5 |
2 | 4 | 1 | 2 |
3 | 3 | 2 | 4 |
4 | 4 | 3 | 4 |
data.apply(pd.value_counts).fillna(0)
Qu1 | Qu2 | Qu3 | |
---|---|---|---|
1 | 1.0 | 1.0 | 1.0 |
2 | 0.0 | 2.0 | 1.0 |
3 | 2.0 | 2.0 | 0.0 |
4 | 2.0 | 0.0 | 2.0 |
5 | 0.0 | 0.0 | 1.0 |
2.3 pandas:汇总和计算描述统计(统计上的方法)相关推荐
- python数据分析pandas_Python数据分析之 pandas汇总和计算描述统计
1. 聚合计算 pandas对象拥有一组常用的数学和统计方法.它们大部分都属于约简和汇总 统计,用于从Series中提取单个值(如sum或mean)或从DataFrame的行或 列中提取一个Serie ...
- pandas知识点(汇总和计算描述统计)
调用DataFrame的sum方法会返还一个含有列的Series: In [5]: df = DataFrame([[1.4,np.nan],[7.1,-4.5],[np.nan,np.nan],[0 ...
- Pandas 基础 (4)—— 汇总和计算描述统计
Pandas 对象拥有一组常用的数学和统计方法,他们大部分都属于约简和汇总统计,用于从 Series 中提取单个值(如 sum/mean),或者从 DataFrame 的行或列中提取一个 Series ...
- Python 数据分析三剑客之 Pandas(五):统计计算与统计描述
CSDN 课程推荐:<迈向数据科学家:带你玩转Python数据分析>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python ...
- Pandas —— cum累积计算和rolling滚动计算
Pandas主要统计特征函数: 方法名 函数功能 sum() 计算数据样本的总和(按列计算) mean() 计算数据样本的算术平均数 var() 计算数据样本的方差 std() 计算数据样本的标准差 ...
- 获取以逗号分隔的多个数据输入成列表,计算基本统计值(平均值、标准差、中位数)
获取以逗号分隔的多个数据输入(输入为一行),计算基本统计值(平均值.标准差.中位数) ...
- pandas最大的时间间隔_pandas计算最大连续间隔的方法
pandas计算最大连续间隔的方法 如下所示: 群里一朋友发了一个如上图的问题,解决方法如下 data = {'a':[1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2],'b':[ ...
- jQuery实现购物车计算价格统计功能
jQuery实现购物车计算价格统计功能 #功能介绍 进入界面,刷新触发onload方法跳转到JS代码,可以对购物车内商品数量进行增加-减少,商品价格自动统计.当更改商品数量的输入框value值时,整个 ...
- NCBI中对所有原核生物ANI计算的统计结果简单讲解
NCBI中对所有原核生物ANI计算的统计结果简单讲解 来龙去脉还没搞清楚,就先从结果切入.放上一个计算结果的链接https://ftp.ncbi.nlm.nih.gov/genomes/ASSEMBL ...
- Python之pandas:利用describe函数统计【类别型】特征/离散型变量的描述性统计信息(包括个数count、unique、top及其freq、first、last)之详细攻略
Python之pandas:利用describe函数统计[类别型]特征/离散型变量的描述性统计信息(包括个数count.unique.top及其freq.first.last)之详细攻略 目录 利用d ...
最新文章
- 计算机电缆数字是什么意思,DJYPV4*2*1.0 计算机电缆规格含义
- dblink查询_分库数据如何查询统计
- Python代码这样写更优雅(转)
- java的注释、关键字、标识符、变量常量、数据类型、运算符、流程控制等
- 14006.xilinx-SDK在线jtag调试
- 1195.最长最短文本
- springboot实现任务调度的第三种方式------使用第三方quartz插件调度(springBoot+quartz+cronTrigger进行任务调度)
- HTML 中获取现在时间,实时时间获取
- 【HDU2825】AC自动机+状压DP
- elasticsearch2.4.1+kibana4.6.1+mavel2.4.1
- 红米Note9系列机型详细配置对比,Note9 4G\Note9 5G\Note9 Pro 5G
- 微软手环2服务器,微软手环2到手后,你要先做这6件事
- 金仓数据库 KingbaseES 异构数据库移植指南 (4. 应用迁移流程)
- java判断txt文件的编码格式
- C语言内联汇编使用方法
- 无法连接到宽带连接被远程计算机终止,无法连接到宽带连接?
- 笔记:PoseCNN:A Convolutional Neural Network for 6D Object Pose Estimation in Cluttered Scenes
- html移动端注册流程,登录和注册移动端.html
- CAN总线基础知识(一)
- 【Unity俯视角射击】我们来做一个《元气骑士》的完整Demo1