日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

使用pandas計算環比和同比的方法實例_python

作者:theskylife ? 更新時間: 2022-05-28 編程語言

前言

在進行業務數據分析時,往往需要使用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進行計算同比和環比的方法,請在使用過程中,結合數據情況先進行數據清洗后,再選擇合適的方法進行計算。

原文鏈接:https://blog.csdn.net/qq_41780234/article/details/123383495

欄目分類
最近更新