はじめに
今回はshift()メソッドを扱います。 行や列の差分や変化率を取得するには、shift()を使わなくても、diff()
やpct_change()
で同じことができます。ただ時系列データを扱うときには、ずらす幅(期間)を指定できるので便利です。
サンプルデータの作成
サンプルデータを作成して、このデータに対してshift()を適用して動きを確認することにしましょう。
# サンプルデータの作成
df_sample=pd.DataFrame({
'A':np.random.randint(0,10,5),
'B':np.random.randint(0,10,5),
'C':np.random.randint(0,10,5)
})
df_sample
shift()の利用例
shift()の基本は、periodsでズラし幅の指定とaxisでズラす方向の指定(defaultでは下方向に1行ズレる) となります。さっそく試してみましょう。
df_sample.shift()
全体をした方向に1行ズラすことができました。行数はそのままとなるので、最後の行は削除されます。
では、ズラし幅を指定してみましょう。periodsでズラす幅を2に指定してみます。
df_sample.shift(periods=2)
簡単ですね。2行ずれたので、後ろの2行は削除されています。次にズラす方向を指定してみましょう。横方向にズラしてみます。
df_sample.shift(axis=1)
これも簡単ですね。次に時系列の場合の例をみておきましょう。時系列では引数freqでD(日)、H(時)などの単位で頻度を指定することができます。
# サンプルデータの作成
df_sample = pd.DataFrame({'value': np.random.randint(1,10,8)},
index=pd.date_range('2020-06-01', '2020-06-15', freq='2D'))
df_sample
引数periodsでズラし幅を決めることもできますが、時系列データの場合には日や時間単位で指定することができます。この場合はfreqという引数を使います。
df_sample.shift(freq='1D')
valueが変わっていないように見えますが、indexをみてください。1日ずつズレていますね。同じように3日分ズラしてみましょう。
df_sample.shift(freq='3D')
indexが3日分ズレているのが確認できますね。
まとめ
いかがでしょうか?
知らないとどうやってやるんだろう?って思いますが、知ってしまえば簡単ですね。データ分析しているときには、前日比や前年比を算出したい場面がありますね。是非、利用してみてください。
コメント