網站首頁 編程語言 正文
統計表中常常以本年累計、上年同期(累計)、當期(例如當月)完成、上月完成為統計數據,并進行同比、環比分析。
如下月報統計表所示樣例,本文將使用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條件修改數據。
原文鏈接:https://xiaoyw.blog.csdn.net/article/details/122979421
相關推薦
- 2022-08-20 Python為什么要保留顯式的self_python
- 2022-10-03 C++利用Opencv實現多個圓形檢測_C 語言
- 2022-06-29 C#集合之自定義集合類_C#教程
- 2022-05-13 修復ffmpeg寫文件時的幀率異常問題記錄
- 2022-10-12 Docker安裝RabbitMQ的超詳細步驟_docker
- 2022-11-23 python人工智能使用RepVgg實現圖像分類示例詳解_python
- 2022-04-14 C語言的分支和循環語句你了解嗎_C 語言
- 2022-12-22 淺析Go語言中數組的這些細節_Golang
- 最近更新
-
- 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同步修改后的遠程分支