使用pandas计算环比和同比的方法实例

 更新时间:2022年03月25日 09:11:55   作者:theskylife  
同比和环比都是为了显示数据的变化速度,但是基数不同,同比侧重长期数据趋势变化,环比侧重于短期内数据趋势变化,下面这篇文章主要给大家介绍了关于如何使用pandas计算环比和同比的相关资料,需要的朋友可以参考下

前言

在进行业务数据分析时,往往需要使用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)})

样本数据截图:

样本2

计算同环比:

test_df3.pct_change(axis='columns',periods=-1)

计算效果截图:

计算结果2

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)

数据样本截图:

样本3

计算季度末环比:

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.后记

以上就是时候用pandas进行计算同比和环比的方法,请在使用过程中,结合数据情况先进行数据清洗后,再选择合适的方法进行计算。

到此这篇关于使用pandas计算环比和同比的文章就介绍到这了,更多相关pandas计算环比和同比内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python3实现tailf命令的示例代码

    python3实现tailf命令的示例代码

    本文主要介绍了python3实现tailf命令的示例代码,tail -f 是一个linux的操作命令.其主要的是会把文件里的最尾部的内容显显示在屏幕上,并且不断刷新,只要文件有变动就可以看到最新的文件内容,感兴趣的可以了解一下
    2023-11-11
  • pyside6-uic生成py代码中文为unicode(乱码)的问题解决方案

    pyside6-uic生成py代码中文为unicode(乱码)的问题解决方案

    这篇文章主要介绍了如何解决pyside6-uic生成py代码中文为unicode(乱码)的问题,文中通过代码和图文介绍的非常详细,对大家解决问题有一定的帮助,需要的朋友可以参考下
    2024-02-02
  • Python中多个数组行合并及列合并的方法总结

    Python中多个数组行合并及列合并的方法总结

    下面小编就为大家分享一篇Python中多个数组行合并及列合并的方法总结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Python强大的自省机制详解

    Python强大的自省机制详解

    这篇文章主要为大家介绍了Python强大的自省机制,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-11-11
  • python urllib urlopen()对象方法/代理的补充说明

    python urllib urlopen()对象方法/代理的补充说明

    这篇文章主要介绍了python urllib urlopen()对象方法/代理的补充说明的相关资料,需要的朋友可以参考下
    2017-06-06
  • 深入探究Python中的多进程模块用法实例

    深入探究Python中的多进程模块用法实例

    多进程是计算机编程中的一个概念,也可以说是一种可用于实现并行性和利用多个 CPU 内核或处理器并发执行任务的技术,在本文中,我们将学习有关 python 中多进程处理的所有知识、理论和实际使用代码
    2024-01-01
  • django输出html内容的实例

    django输出html内容的实例

    今天小编就为大家分享一篇django输出html内容的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • Django重定向redirect的具有使用

    Django重定向redirect的具有使用

    在Django中,redirect是一个用于进行重定向的函数,本文主要介绍了Django重定向redirect的具有使用,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • 利用Python Pygame放个烟花

    利用Python Pygame放个烟花

    Pygame是一款专门为开发和设计 2D 电子游戏而生的软件包,它支 Windows、Linux、Mac OS 等操作系统,具有良好的跨平台性。本文将用它放个烟花,快来一起动手尝试一下吧
    2022-01-01
  • 使用Django和Flask获取访问来源referrer

    使用Django和Flask获取访问来源referrer

    这篇文章主要介绍了使用Django和Flask获取访问来源referrer,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04

最新评论