Pandas系列(七)-计算工具介绍
内容目录
- 1. 统计函数
- 2. 窗口函数
- 3. 加深加强
数据准备
# 导入相关库
import numpy as np
import pandas as pd
#Pandas 中包含了非常丰富的计算工具,如一些统计函数、窗口函数、聚合等计算工具。
index = pd.Index(data=["Tom", "Bob", "Mary", "James", "Andy", "Alice"], name="name")
data = {
"age": [18, 40, 28, 20, 30, 35],
"income": [1000, 4500 , 1800, 1800, 3000, np.nan],
}
df = pd.DataFrame(data=data, index=index)
df
Out[43]:
age income
name
Tom 18 1000.0
Bob 40 4500.0
Mary 28 1800.0
James 20 1800.0
Andy 30 3000.0
Alice 35 NaN
1.统计函数
最常见的计算工具莫过于一些统计函数了。
这里我们首先构建一个包含了用户年龄与收入的 DataFrame。我们可以通过 cov 函数来求出年龄与收入之间的协方差,计算的时候会丢弃缺失值。除了协方差之外,我们还可以通过 corr 函数来计算下它们之间的相关性,计算的时候会丢弃缺失值。默认情况下 corr 计算相关性时用到的方法是 pearson,当然了你也可以指定 kendall 或 spearman。除了相关性的计算外,还可以通过 rank 函数求出数据的排名顺序。如果有相同的数,默认取其排名的平均值作为值。我们可以设置参数来得到不同的结果。可以设置的参数有:min、max、first、dense。
#协方差
df.age.cov(df.income)
#相关系数
df.age.corr(df.income)
df.age.corr(df.income,method="kendall")
df.age.corr(df.income,method="spearman")
#排名
df.income.rank()
df.income.rank(method="first")
2.窗口函数
有的时候,我们需要对不同窗口的中数据进行一个统计,常见的窗口类型为时间窗口。
例如,下面是某个餐厅 7 天的营业额,我们想要计算每两天的收入总额,如何计算呢?
通过 rolling 我们可以实现,设置 window=2 来保证窗口长度为 2,设置 on="date" 来保证根据日期这一列来滑动窗口(默认不设置,表示根据索引来欢动)
data = {
"turnover": [12000, 18000, np.nan, 12000, 9000, 16000, 18000],
"date": pd.date_range("2018-07-01", periods=7)
}
df2 = pd.DataFrame(data=data)
df2
Out[44]:
turnover date
0 12000.0 2018-07-01
1 18000.0 2018-07-02
2 NaN 2018-07-03
3 12000.0 2018-07-04
4 9000.0 2018-07-05
5 16000.0 2018-07-06
6 18000.0 2018-07-07
df2.rolling(window=2, on="date").sum()
Out[45]:
turnover date
0 NaN 2018-07-01
1 30000.0 2018-07-02
2 NaN 2018-07-03
3 NaN 2018-07-04
4 21000.0 2018-07-05
5 25000.0 2018-07-06
6 34000.0 2018-07-07
#是不是发现,有很多结果是缺失值,导致这个结果的原因是因为在计算时,窗口中默认需要的最小数据个数与窗口长度一致,这里可以设置 min_periods=1 来修改下。
df2.rolling(window=2, on="date", min_periods=1).sum()
Out[46]:
turnover date
0 12000.0 2018-07-01
1 30000.0 2018-07-02
2 18000.0 2018-07-03
3 12000.0 2018-07-04
4 21000.0 2018-07-05
5 25000.0 2018-07-06
6 34000.0 2018-07-07
#有时候,我想要计算每段时间的累加和,如何实现呢?先来看看第一种方式吧。
df2.rolling(window=len(df2), on="date", min_periods=1).sum()
Out[47]:
turnover date
0 12000.0 2018-07-01
1 30000.0 2018-07-02
2 30000.0 2018-07-03
3 42000.0 2018-07-04
4 51000.0 2018-07-05
5 67000.0 2018-07-06
6 85000.0 2018-07-07
#还有另外一种方式,直接使用 expanding 来生成窗口。
df2.expanding(min_periods=1)["turnover"].sum()
Out[48]:
0 12000.0
1 30000.0
2 30000.0
3 42000.0
4 51000.0
5 67000.0
6 85000.0
Name: turnover, dtype: float64
3、加深加强
除了可以使用 sum 函数外,还有很多其他的函数可以使用,如:count、mean、median、min、max、std、var、quantile、apply、cov、corr等等。
方法 描述
count() 非空观测值数量
sum() 值的总和
mean() 价值的平均值
median() 值的算术中值
min() 最小值
max() 最大
std() 贝塞尔修正样本标准差
var() 无偏方差
skew() 样品偏斜度(三阶矩)
kurt() 样品峰度(四阶矩)
quantile() 样本分位数(百分位上的值)
apply() 通用适用
cov() 无偏协方差(二元)
corr() 相关(二进制)
不过上面的方式只能生成一个结果,有时候想要同时求出多个结果(如求和和均值),如何实现呢?
借助 agg 函数可以快速实现
df2.rolling(window=2, min_periods=1)["turnover"].agg([np.sum, np.mean])
Out[52]:
sum mean
0 12000.0 12000.0
1 30000.0 15000.0
2 18000.0 18000.0
3 12000.0 12000.0
4 21000.0 10500.0
5 25000.0 12500.0
6 34000.0 17000.0
#如果传入一个字典,可以为生成的统计结果重命名。
df2.rolling(window=2, min_periods=1)["turnover"].agg({"tur_sum": np.sum, "tur_mean": np.mean})
Out[53]:
tur_sum tur_mean
0 12000.0 12000.0
1 30000.0 15000.0
2 18000.0 18000.0
3 12000.0 12000.0
4 21000.0 10500.0
5 25000.0 12500.0
6 34000.0 17000.0
Pandas系列(七)-计算工具介绍的更多相关文章
- Pandas 计算工具介绍
# 导入相关库 import numpy as np import pandas as pd 统计函数 最常见的计算工具莫过于一些统计函数了.首先构建一个包含了用户年龄与收入的 DataFrame i ...
- 红豆带你从零学C#系列—Visual Studio工具介绍、下载和安装
一.Visual Studio的下载 Visual Studio(简称VS)是微软的一套完整的开发工具集,集成了能够开发并运行如C#.C++.VB.F#等程序的开发环境,目前最新的版本是Visual ...
- 计算广告CTR预估系列(七)--Facebook经典模型LR+GBDT理论与实践
计算广告CTR预估系列(七)--Facebook经典模型LR+GBDT理论与实践 2018年06月13日 16:38:11 轻春 阅读数 6004更多 分类专栏: 机器学习 机器学习荐货情报局 版 ...
- 自定义View系列教程01--常用工具介绍
站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架(1)- 核心基础 Android多分辨率适配框架(2)- 原理剖析 Android多分辨率适配框架(3)- 使用指南 自定 ...
- 系列二VS项目软件配置工具介绍
原文:系列二VS项目软件配置工具介绍 Svn和VisualSvn介绍 在使用TortoiseSvn(SVN客户端)+ AnkhSvn(VS2008插件) +VisualSvn Server(版本控制服 ...
- 动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题
动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题 D3 ...
- java基础解析系列(七)---ThreadLocal原理分析
java基础解析系列(七)---ThreadLocal原理分析 目录 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)-- ...
- Pandas系列之入门篇
Pandas系列之入门篇 简介 pandas 是 python用来数据清洗.分析的包,可以使用类sql的语法方便的进行数据关联.查询,属于内存计算范畴, 效率远远高于硬盘计算的数据库存储.另外pand ...
- Red Gate系列 - SQL各种工具
Red Gate系列 - SQL各种工具 Red Gate系列文章: Red Gate系列之一 SQL Compare 10.4.8.87 Edition 数据库比较工具 完全破解+使用教程 Red ...
随机推荐
- CentOS7中利用Xshell6向虚拟机本地上传文件
环境交代 Linux系统:CentOS7, Xshell版本:6 操作步骤 下面我们以一个文件上传来演示用法 第一步 建立连接,这里不多说 在Xshell中点击如下图标,或者直接按 Alt+Ctrl+ ...
- 如何删除windows中运行的历史记录
参照下图进入到注册表,依次打开红圈中的路径,在RunMRU里面列出来的全部是记录,全部删除即可
- web框架开发-分页器(Paginator)
Django有自带的分页器,可以将数据分在不同的页面中,并提供一些属性和方法实现对分页数据的操作.分页功能的类位于django/core/paginator.py中. 常用方法 # 分页器 # pag ...
- 《通过C#学Proto.Actor模型》之Mailbox
邮箱是Actor模型的一个重要组成部分,负责接收发过来的消息,并保存起来,等待Actor处理.邮箱中维护着两种队列,一种是存系统消息,另一个是存用户消息,系统省是指Started,Stoping,St ...
- 如何解决一个从SkylineGlobe5版本升级到7版本遇到的小问题
前些天,有朋友问,用Skyline5版本开发的WinForm程序,升级到7版本的时候,工程提示下面这样“创建组件AxHost失败”的错误,该如何解决呢? 后来经过百度搜索,找到了这样的答案, 测试发现 ...
- Do You Kown Asp.Net Core -- Asp.Net Core 2.0 未来web开发新趋势 Razor Page
Razor Page介绍 前言 上周期待已久的Asp.Net Core 2.0提前发布了,一下子Net圈热闹了起来,2.0带来了很多新的特性和新的功能,其中Razor Page引起我的关注,作为web ...
- iOS抓包工具Charles
Charles安装 HTTP抓包 HTTPS抓包 1. Charles安装 官网下载安装Charles:https://www.charlesproxy.com/download/ 2. HTTP ...
- static 与final abstract关键字
一.通常访问类的属性与方法需要创建该类的实例,而static关键字的访问不需要某个特定的实例. 1.静态变量 使用类名.变量直接访问 package text5; public class Fathe ...
- BZOJ3328 PYXFIB 单位根反演
题意:求 \[ \sum_{i=0}^n[k|i]\binom{n}{i}Fib(i) \] 斐波那契数列有简单的矩阵上的通项公式\(Fib(n)=A^n_{1,1}\).代入得 \[ =\sum_{ ...
- 定时任务 cron命令
一名linux新手,因为项目需要现在在学习linux操作系统. 因项目需要做一个定时任务,每个小时访问某一个url一次,通过参考很多大神的博客学会了crontab命令的使用方法 crontab -u ...