使用pandas计算环比和同比的方法实例
本文详细介绍在Python中使用pandas库计算环比和同比数据的方法。通过示例演示了利用shift、diff及pct_change函数处理时间序列数据的技巧,涵盖月度、季度及年度周期设置,并解析了处理缺失值和不同轴向计算的参数配置,帮助开发者高效完成业务数据分析。
前言
在业务数据分析场景中,经常需要计算环比、同比以及增长率等关键指标。为了提升统计效率,本文整理了基于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进行计算同比和环比的方法,请在使用过程中,结合数据情况先进行数据清洗后,再选择合适的方法进行计算。
到此这篇关于使用pandas计算环比和同比的文章就介绍到这了,更多相关pandas计算环比和同比内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









