Pandas常用累计、同比、环比等统计方法实践案例
统计表中常常以本年累计、上年同期(累计)、当期(例如当月)完成、上月完成为统计数据,并进行同比、环比分析。如下月报统计表所示样例,本文将使用Python Pandas工具进行统计。
其中:
- (本年)累计:是指本年1月到截止月份的合计数
- (上年)同期(累计):是指去年1月到与本年累计所对应截止月份的合计数
- 同比(增长率)=(本期数-同期数)/同期数*100%
- 环比(增长率)=(本期数-上期数)/上期数*100%
注:这里的本期是指本月完成或当月完成,上期数是指上月完成。
示例数据:
注:为了演示方便,本案例数据源仅使用2年,且每年5个月的数据。
1. (本年)累计
在做统计分析开发中,按年度、按月累计某些统计数据,是比较常见的需求。对于数据来说,就是按规则逐行累加数据。
Pandas中的cumsum()函数可以实现按某时间维度累计需求。
# 取本年累计值
import pandas as pddf = pd.read_csv('data2021.csv')
cum_columns_name = ['cum_churncount','cum_newcount']
df[cum_columns_name] = df[['years','churncount','newcount']].groupby(['years']).cumsum()
注:其中分组‘years’是指年度时间维度累计。
计算结果如下:
2. (上年)同期累计
对于(上年)同期累计,将直接取上一年度累计值的同月份数据。pandas DataFrame.shift()函数可以把数据移动指定的行数。
接续上列,读取同期数据。首先是把‘yearmonth’上移五行,如上图所示得到新的DataFrame,通过‘yearmonth’进行两表数据关联(左关联:左侧为原表,右侧为移动后的新表),实现去同期数据效果。
cum_columns_dict = {'cum_churncount':'cum_same_period_churncount','cum_newcount':'cum_same_period_newcount'}
df_cum_same_period = df[['cum_churncount','cum_newcount','yearmonth']].copy()
df_cum_same_period = df_cum_same_period.rename(columns=cum_columns_dict)
#df_cum_same_period.loc[:,'yearmonth'] = df_cum_same_period['yearmonth'].shift(-12) # 一年12个月
df_cum_same_period.loc[:,'yearmonth'] = df_cum_same_period['yearmonth'].shift(-5) # 由于只取5个月数据的原因df = pd.merge(left=df,right=df_cum_same_period,on='yearmonth',how='left')
3. 上月(完成)
取上月的数据,使用pandas DataFrame.shift()函数把数据移动指定的行数。
接续上列,读取上期数据。(与取同期原理一样,略)
last_mnoth_columns_dict = {'churncount':'last_month_churncount','newcount':'last_month_newcount'}
df_last_month = df[['churncount','newcount','yearmonth']].copy()
df_last_month = df_last_month.rename(columns=last_mnoth_columns_dict)df_last_month.loc[:,'yearmonth'] = df_last_month['yearmonth'].shift(-1) # 移动一行
df = pd.merge(left=df,right=df_last_month,on='yearmonth',how='left')
4. 同比(增长率)
计算同比涉及到除法,需要剔除除数为零的数据。
df.fillna(0,inplace=True) # 空值填充为0
# 计算同比
df.loc[df['cum_same_period_churncount']!=0,'cum_churncount_rat'] = (df['cum_churncount']-df['cum_same_period_churncount'])/df['cum_same_period_churncount'] # 除数不能为零
df.loc[df['cum_same_period_newcount']!=0,'cum_newcount_rat'] = (df['cum_newcount']-df['cum_same_period_newcount'])/df['cum_same_period_newcount'] # 除数不能为零
df[['yearmonth','cum_churncount','cum_newcount','cum_same_period_churncount','cum_same_period_newcount','cum_churncount_rat','cum_newcount_rat']]
5. 环比(增长率)
# 计算环比
df.loc[df['last_month_churncount']!=0,'churncount_rat'] = (df['churncount']-df['last_month_churncount'])/df['last_month_churncount'] # 除数不能为零
df.loc[df['last_month_newcount']!=0,'newcount_rat'] = (df['newcount']-df['last_month_newcount'])/df['last_month_newcount'] # 除数不能为零
df[['yearmonth','churncount','newcount','last_month_churncount','last_month_newcount','churncount_rat','newcount_rat']]
6. 总结
pandas做统计计算功能方法比较多,这里总结用到的技术有累计cumsum()函数、移动数据shift()函数、表合并关联merge()函数,以及通过loc条件修改数据。
Pandas常用累计、同比、环比等统计方法实践案例相关推荐
- 100天精通Python(数据分析篇)——第62天:pandas常用统计方法大全(含案例)
文章目录 一.常用统计方法与案例 1. 求和(sum) 2. 求平均值(mean) 3. 求最小值(min) 4. 求最大值(max) 5. 求中位数(median) 6. 求众数(mode) 7. ...
- 异常检测方法——DBSCAN、孤立森林、OneClassSVM、LOF、同比环比、正态分布、箱线图
异常检测方法 基于时间序列分析 同比环比 基于统计 单特征且符合正态分布 基于统计 箱线图 基于聚类 DBSCAN 基于树模型 孤立森林 基于线性模型 OneClassSVM 基于密度 LOF 异常检 ...
- R语言统计方法-我常用的
R语言统计方法-我常用的 文章目录 R语言统计方法-我常用的 一.数据与R 二.数据的描述统计量 三.方差分析 一.数据与R ①直接录入数据 names<-c(列名) data<-c() ...
- 【案例教程】地下水环评(一级)实践技术及Modflow地下水数值模拟
[前沿] 地下水数值模拟技术应用与地下水环评报告编制方法实践线上直播课程,主要围绕的环评导则,结合不同行业类别,实例讲解地下水环境影响评价的原则.内容.工作程序.方法.包括数据处理分析.数值模型构建以 ...
- pandas的基本功能与常用的数学统计方法
python高级应用与数据分析学习笔记 13 1.pandas的基本功能 1)数据文件读取 文本数据读取 2)索引.选取和数据过滤 3)算术运算和数据对齐 4)函数的应用和映射 5)重置索引 2.数据 ...
- tableau实现年累计,月累计投放以及同比环比
1.创建参数:[日期参数] 2.创建新的字段:[近两年] 放在筛选器上选True ,逻辑为 : 说明:根据日期参数,过滤出近两年的发放日期 [发放日期] >= date(DATETRUNC(' ...
- pandas 常用的数学统计方法 mad()
pandas 常用的数学统计方法 mad() 1.定义:根据平均值计算平均绝对距离差. 2.示例: import pandas as pdstudent_info = pd.read_csv(&quo ...
- mysql的时间日期函数总结。案例应用:计算同比、环比、累计同比,股票类延伸。---- 前海最靓的仔,陈宇超
第一部分,基础:常见日期(date)和时间(time)函数的使用 1.获取当前日期时间 select now() [2019-06-22 22:22:23 ] 返回当前日期时间,受set ...
- python计算标准差函数_Python pandas,pandas常用统计方法,求和sum,均值mean,最大值max,中位数median,标准差std...
mean()平均值 median()中位数 max()最大值 min()最小值 sum()求和 std()标准差 Series类型独有的方法: argmax()最大值的位置 a ...
最新文章
- html+css3实现二级下拉菜单
- python【蓝桥杯vip练习题库】BASIC-23芯片测试(统计)
- 初识遗传算法 蚁群算法
- 看完这个你还不理解右值引用和移动构造 你就可以来咬我(下)
- SQL数据库面试题以及答案!
- 难以拒绝的中国风雅致新年元旦海报来袭
- PostgreSQL 10.1 手册_部分 IV. 客户端接口_第 34 章 大对象_34.2. 实现特性
- Java面试问题:新的任务提交到线程池,线程池是怎样处理
- 路由器将迎重磅升级 WiFi速度提升3倍
- 利用python和cloudvolume包从谷歌云盘中多线程下载数据
- 推荐电影电视剧下载最好去处
- python爬取数据教程_python爬虫爬取网页数据并解析数据
- 什么是防雷接地,防雷接地工程的作用和重要意义
- 运动员(射击)的成绩可以用脑电技术预测吗?
- java ppt控件_Java版PPT操作控件Spire.Presentation v2.12.2新版来袭!支持获取具有超链接的目标幻灯片...
- IDEA中报错:java: -source 1.5 中不支持静态接口方法调用
- C#中BackgroundImage与Image的区别
- MySQL实战——表、索引创建与优化
- 如何在百度搜索到自己的网站,加快百度的关键字录入
- 电脑中设备管理器-声音、视频和游戏控制器突然不见了——解决方法