Pandas常用累计、同比、环比等统计方法实践过程

 更新时间:2022年05月17日 10:37:26   作者:肖永威  
这篇文章主要介绍了Pandas常用累计、同比、环比等统计方法实践过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

统计表中常常以本年累计、上年同期(累计)、当期(例如当月)完成、上月完成为统计数据,并进行同比、环比分析。

如下月报统计表所示样例,本文将使用Python Pandas工具进行统计。

在这里插入图片描述

其中:

  • (本年)累计:是指本年1月到截止月份的合计数
  • (上年)同期(累计):是指去年1月到与本年累计所对应截止月份的合计数
  • 同比(增长率)=(本期数-同期数)/同期数*100%
  • 环比(增长率)=(本期数-上期数)/上期数*100%

注:这里的本期是指本月完成或当月完成,上期数是指上月完成。

示例数据:

在这里插入图片描述

注:为了演示方便,本案例数据源仅使用2年,且每年5个月的数据。

1.(本年)累计

在做统计分析开发中,按年度、按月累计某些统计数据,是比较常见的需求。对于数据来说,就是按规则逐行累加数据。

Pandas中的cumsum()函数可以实现按某时间维度累计需求。

# 取本年累计值
import pandas as pd
df = 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条件修改数据。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python3 无重复字符的最长子串的实现

    Python3 无重复字符的最长子串的实现

    这篇文章主要介绍了Python3 无重复字符的最长子串的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • 利用pandas按日期做分组运算的操作

    利用pandas按日期做分组运算的操作

    这篇文章主要介绍了利用pandas按日期做分组运算的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Python实现向服务器请求压缩数据及解压缩数据的方法示例

    Python实现向服务器请求压缩数据及解压缩数据的方法示例

    这篇文章主要介绍了Python实现向服务器请求压缩数据及解压缩数据的方法,涉及Python文件传输及zip文件相关操作技巧,需要的朋友可以参考下
    2017-06-06
  • pythotn条件分支与循环详解(2)

    pythotn条件分支与循环详解(2)

    这篇文章主要介绍了Python条件分支和循环用法,结合实例形式较为详细的分析了Python逻辑运算操作符,条件分支语句,循环语句等功能与基本用法,需要的朋友可以参考下
    2021-08-08
  • Python OpenCV获取视频的方法

    Python OpenCV获取视频的方法

    本篇文章主要介绍了Python OpenCV获取视频的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • python多个字符串条件分割split方式

    python多个字符串条件分割split方式

    这篇文章主要介绍了python多个字符串条件分割split方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Python 操作 MongoDB 讲解详细

    Python 操作 MongoDB 讲解详细

    MongoDB是一款开源的、基于分布式的、面向文档存储的非关系型数据库。拥有高性能、高可用,易扩展的优点,并且支持丰富的查询语言来支持读写操作以及更复杂的查询等。接下来我们来看一下如何使用Python操作MongoDB数据库
    2021-09-09
  • 使用Pandas实现可视化带有标签列的数据表

    使用Pandas实现可视化带有标签列的数据表

    Pandas是Python中一个灵活强大的数据处理库,它提供了大量数据操作和分析工具,本文我们将讨论如何使用Pandas可视化带有标签列的数据表,以便更好地呈现和传达数据的信息,需要的可以了解下
    2024-02-02
  • pytest自动化测试数据驱动yaml/excel/csv/json

    pytest自动化测试数据驱动yaml/excel/csv/json

    这篇文章主要为大家介绍了pytest自动化测试数据驱动yaml/excel/csv/json的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Python参数传递机制传值和传引用原理详解

    Python参数传递机制传值和传引用原理详解

    这篇文章主要介绍了Python参数传递机制传值和传引用原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05

最新评论