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

作者:肖永威 时间:2021-03-13 01:48:36 

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

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

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

其中:

  • (本年)累计:是指本年1月到截止月份的合计数

  • (上年)同期(累计):是指去年1月到与本年累计所对应截止月份的合计数

  • 同比(增长率)=(本期数-同期数)/同期数*100%

  • 环比(增长率)=(本期数-上期数)/上期数*100%

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

示例数据:

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

注:为了演示方便,本案例数据源仅使用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’是指年度时间维度累计。

计算结果如下:

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

2.(上年)同期累计

对于(上年)同期累计,将直接取上一年度累计值的同月份数据。pandas DataFrame.shift()函数可以把数据移动指定的行数。

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

接续上列,读取同期数据。首先是把‘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']]

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

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']]

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

6. 总结

pandas做统计计算功能方法比较多,这里总结用到的技术有累计cumsum()函数、移动数据shift()函数、表合并关联merge()函数,以及通过loc条件修改数据。

来源:https://xiaoyw.blog.csdn.net/article/details/122979421

标签:Pandas,累计,同比,环比
0
投稿

猜你喜欢

  • 浅谈Python中的字符串

    2022-10-05 00:39:22
  • ORACLE正则匹配查询LIKE查询多个值检索数据库对象

    2024-01-20 18:11:01
  • 浅谈Python中的可变对象和不可变对象

    2021-07-17 16:58:49
  • Postman返回中文乱码的解决方案

    2022-03-16 15:03:02
  • PyCharm代码格式调整方法

    2021-05-21 14:59:32
  • mysql的in会不会让索引失效?

    2024-01-27 11:50:44
  • python实现八大排序算法(1)

    2022-05-20 08:17:47
  • 使用OpenCV实现人脸图像卡通化的示例代码

    2023-01-03 13:38:49
  • Window10上Tensorflow的安装(CPU和GPU版本)

    2021-05-13 19:18:37
  • 基于python 凸包问题的解决

    2021-04-11 02:56:41
  • PHP中生成UUID自定义函数分享

    2023-11-14 16:57:04
  • python 操作sqlite数据库的方法

    2024-01-26 04:18:43
  • python matplotlib绘画十一种常见数据分析图

    2022-09-02 04:50:41
  • python 装饰器功能以及函数参数使用介绍

    2022-04-03 05:12:32
  • Python设计模式之模板方法模式实例详解

    2023-07-21 01:29:19
  • Python如何telnet到网络设备

    2023-11-20 09:47:45
  • PyTorch 对应点相乘、矩阵相乘实例

    2021-10-23 16:33:29
  • Python安装Flask环境及简单应用示例

    2021-09-19 10:07:24
  • python使用opencv按一定间隔截取视频帧

    2021-10-29 01:27:14
  • 使用keras和tensorflow保存为可部署的pb格式

    2022-11-11 16:42:03
  • asp之家 网络编程 m.aspxhome.com