使用pandas计算环比和同比的方法实例
作者:theskylife 发布时间:2021-02-15 18:06:34
前言
在进行业务数据分析时,往往需要使用pandas计算环比、同比及增长率等指标,为了能够更加方便的进行的统计数据,整理方法如下。
1.数据准备
为方便进行演示,此处提前生成需要进行统计的数据,数据已经是按照时间维度进行排序。
months = pd.date_range(start='2010-01-01', end='2020-12-31', freq='M')
test_df = pd.DataFrame({'month': months,
'v': 100*np.random.rand(months.shape[0], 1).reshape(months.shape[0])})
2.环比计算
2.1 方法1
test_df['v_last']=test_df['v'].shift(1)
test_df['month_erlier_1']=test_df['v']/test_df['v_last']-1
2.2 方法2
test_df['m_m_diff']=test_df['v'].diff()
test_df['month_erlier_2']=test_df['m_m_diff']/test_df['v'].shift(1)
2.3 方法3
test_df['month_erlier_3']=test_df['v'].pct_change()
3.同比计算
继续使用上述构建的数据源进行计算。
3.1 方法1
test_df["last_year_v"]=test_df['v'].shift(12)
test_df['year_erlier_1']=test_df['v']/test_df['last_year_v']-12
3.2 方法2
test_df["year_diff"]=test_df['v'].diff(12)
test_df['year_diff'].fillna(0,inplace=True)
test_df['year_erlier_2']=test_df['year_diff']/(test_df['v']-test_df['year_diff'])
3.3 方法3
test_df['year_erlier_3']=test_df["v"].pct_change(periods=12)
4.关于pct_change()函数
pct_change主要涉及一下参数:
periods=1,用来设置计算的周期。
fill_method=‘pad’,如何在计算百分比变化之前处理缺失值(NA)。
limit=None,设置停止填充条件,即当遇到填充的连续缺失值的数量n时,停止此处填充
freq=None,从时间序列 API 中使用的增量(例如 ‘M’ 或 BDay())
4.1 使用例子1
#构建数据
months = pd.date_range(start='2020-01-01', end='2020-12-31', freq='M')
test_df2 = pd.DataFrame({'month': months,
'v': 100*np.random.rand(months.shape[0], 1).reshape(months.shape[0])})
test_df2.loc[((test_df2.index>5) & (test_df2.index<9) ),'v']=np.nan
test_df2.loc[test_df2.index==3,'v']=np.nan
test_df2.loc[test_df2.index==10,'v']=np.nan
数据展示:
计算环比:
#向下进行填充,当连续缺失值的数量大于2时不进行填充
test_df2['v'].pct_change(1,fill_method='ffill',limit=2)
计算效果图:
4.2 使用例子2
# 生成样本数据
test_df3 = pd.DataFrame({'2020': 100*np.random.rand(5).reshape(5),
'2019': 100*np.random.rand(5).reshape(5),
'2018': 100*np.random.rand(5).reshape(5)})
样本数据截图:
计算同环比:
test_df3.pct_change(axis='columns',periods=-1)
计算效果截图:
4.3 使用例子3
#构建数据样本
months = pd.date_range(start='2020-01-01', end='2020-12-31', freq='M')
test_df4 = pd.DataFrame({
'v': 100*np.random.rand(months.shape[0], 1).reshape(months.shape[0])}, index=months)
数据样本截图:
计算季度末环比:
test_df4["v"].pct_change(freq="Q")
计算效果图:
计算过程解释:
2020-03-31行处的值:使用3月份和1月份进行环比,即55.717305/84.492806-1
2020-06-30行处的值:使用6月份和3月份进行环比
计算环比增长
方法一:
for i in range(0,len(data)):
if i == 0:
data['huanbi'][i] = 'null'
else:
data['huanbi'][i] = format((data['mony'][i] - data['mony'][i-1])/data['mony'][i-1],'.2%')
#format(res,'.2%') 小数格式化为百分数
方法二:
使用diff(periods=1, axis=0)) 一阶差分函数
periods:移动的幅度 默认值为1
axis:移动的方向,{0 or ‘index’, 1 or ‘columns’},如果为0或者’index’,则上下移动,如果为1或者’columns’,则左右移动。默认列向移动
data['huanbi_1'] = data.mony.diff()
方法三:
使用pct_change()
data['huanbi_1'] = data.mony.pct_change()
data.fillna(0,inplace=True)
计算同比增长
使用一阶差分函数diff()
data['tongbi_shu'] = data.mony.diff(12)
data.fillna(0,inplace=True)
data['tongbi'] = data['tongbi_shu']/(data['mony'] - data['tongbi_shu'])
``
5.后记
来源:https://blog.csdn.net/qq_41780234/article/details/123383495


猜你喜欢
- dict的很多方法跟list有类似的地方,下面一一道来,并且会跟list做一个对比嵌套嵌套在list中也存在,就是元素是list,在dict
- 目录项目介绍已有功能环境安装Windows用看这里ubuntu用户看这里使用方式:主要代码项目地址项目介绍可以下载doc,ppt,pdf.对
- 具体代码如下所示:package mainimport ( "bufio" "io&q
- 本文实例讲述了Python实现的银行系统模拟程序。分享给大家供大家参考,具体如下:银行系统模拟程序1、概述使用面向对象思想模拟一个简单的银行
- asp.net的dropdownlist控件为我们的web应用提供了许多用处,但有一点我总感觉不爽的就是在使用dropdownlist的事件
- 今天在网上看到type的一段代码 ,然后查了一下文档,才知道type还有三个参数的用法。http://docs.python.org/2/l
- 1. 如何停止任务?我们可以通过 asyncio.Task 对象上的 cancel() 方法取消任务。如果任务被取消,cancel() 方法
- 前言CRUD代表: 增加(create) ,查询(retrieve) ,更新(update) ,删除(delete) 单词首字母。一、新增数
- 以行的形式读出一个文件最简单的方式是使用文件对象的readline()、readlines()和xreadlines()方法。Python2
- 我们可以利用err对象来判断。当程序没有出现错误就说明已经执行了sql操作: sql="insert into
- 写在前面因为暂时还没有想好做什么具体的某个项目来提升对python的理解,所以就自己想着做一下小玩意来加强一下自己对一些库和方法的理解分析1
- 2003年以来,网页的平均尺寸已经增长3倍。从2003到2008,网页的平均尺寸从93.7K增至312K,增幅233%。同时,在这5年之内,
- 前言Tkinter(即 tk interface) 是 Python 标准 GUI 库,简称 “Tk&rdquo
- 制作初衷:外地开了票到公司后发现信息有错误,无法报销;公司的行政和财务经常在工作日被问及公司开票信息,影响心情和工作;引入相应的专业APP来
- 你好由于你是游客无法查看本文请你登录再进谢谢合作。。。。。当你在爬某些网站的时候需要你登录才可以获取数据咋整?莫慌把这几招传授给你让你以后从
- 最近研究了京东商城用jQuery的实现如下:就是默认地址赋给img标签的src2属性,显示时赋给src属性值。function lazylo
- 导语大家早上好哈!——有没有想我啊?木木子来啦,今日上线放一波大招给大家!刚学会了录制视频,之后的效果动态显示终于完美录制出来了!今天跟着小
- 目录概述针对同一类型问题的多种处理方式一、不使用策略模式二、策略模式UML总结示例概述定义一系列算法,将每个算法封装起来。并让它们能够相互替
- 目录图像边框的实现图像边框设计的主要函数图像混合的实现图像混合实现的主要函数主要思路图像边框的实现图像边框设计的主要函数cv.copyMak
- 简单来说conda有什么用?方便的创建多个python虚拟环境,方便多个python项目同时开发的时候,每个项目都有自己独立的python开