網站首頁 編程語言 正文
前言
在進行業務數據分析時,往往需要使用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.后記
以上就是時候用pandas進行計算同比和環比的方法,請在使用過程中,結合數據情況先進行數據清洗后,再選擇合適的方法進行計算。
原文鏈接:https://blog.csdn.net/qq_41780234/article/details/123383495
相關推薦
- 2022-06-06 淺談Redis?中的過期刪除策略和內存淘汰機制_Redis
- 2022-09-04 Go語言流程控制語句_Golang
- 2022-07-28 Redis基本數據類型Zset有序集合常用操作_Redis
- 2022-03-30 詳解nginx?location指令_nginx
- 2023-07-03 Python?Thread虛假喚醒概念與防范詳解_python
- 2023-07-13 css對盒模型的理解
- 2022-11-01 ElasticSearch寫入流程實例解析_相關技巧
- 2023-01-19 C++深度探索虛函數指針示例_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支