目次
概要
pandas の diff で変化量、pct_change で変化率を計算する方法を解説します。
pandas.DataFrame.diff
pandas.DataFrame.diff は、行または列方向の値の変化量を計算します。
DataFrame.diff(self, periods=1, axis=0) → ’DataFrame’
引数
| 名前 | 型 | デフォルト値 |
|---|---|---|
| periods | int | 1 |
| 差分をとる際の間隔。負の値も指定可。 | ||
| axis | {0 or ‘index’, 1 or ‘columns’} | 0 |
| 差分をとる方向 | ||
返り値
| 名前 | 説明 |
|---|---|
| DataFrame | 差分結果 |
サンプルコード
In [1]:
import numpy as np
import pandas as pd
X = np.array([[0, 0, 0], [1, 2, 3], [2, 4, 6], [3, 6, 9], [4, 8, 12],])
df = pd.DataFrame(X)
df
| 0 | 1 | 2 | |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 1 | 1 | 2 | 3 |
| 2 | 2 | 4 | 6 |
| 3 | 3 | 6 | 9 |
| 4 | 4 | 8 | 12 |
axis – 差分をとる方向を指定する
In [2]:
df.diff(axis=0)
| 0 | 1 | 2 | |
|---|---|---|---|
| 0 | NaN | NaN | NaN |
| 1 | 1.0 | 2.0 | 3.0 |
| 2 | 1.0 | 2.0 | 3.0 |
| 3 | 1.0 | 2.0 | 3.0 |
| 4 | 1.0 | 2.0 | 3.0 |
In [3]:
df.diff(axis=1)
| 0 | 1 | 2 | |
|---|---|---|---|
| 0 | NaN | 0.0 | 0.0 |
| 1 | NaN | 1.0 | 1.0 |
| 2 | NaN | 2.0 | 2.0 |
| 3 | NaN | 3.0 | 3.0 |
| 4 | NaN | 4.0 | 4.0 |
periods – 差分をとる間隔を指定する
In [4]:
df.diff(periods=2)
| 0 | 1 | 2 | |
|---|---|---|---|
| 0 | NaN | NaN | NaN |
| 1 | NaN | NaN | NaN |
| 2 | 2.0 | 4.0 | 6.0 |
| 3 | 2.0 | 4.0 | 6.0 |
| 4 | 2.0 | 4.0 | 6.0 |
In [5]:
df.diff(periods=-1)
| 0 | 1 | 2 | |
|---|---|---|---|
| 0 | -1.0 | -2.0 | -3.0 |
| 1 | -1.0 | -2.0 | -3.0 |
| 2 | -1.0 | -2.0 | -3.0 |
| 3 | NaN | NaN | NaN |
pandas.DataFrame.pct_change
pandas.DataFrame.pct_change は、行または列方向の値の変化率を計算します。
DataFrame.pct_change(self: ~ FrameOrSeries, periods=1, fill_method='pad', limit=None, freq=None, **kwargs) → ~FrameOrSeries
引数
| 名前 | 型 | デフォルト値 |
|---|---|---|
| periods | int | 1 |
| 差分をとる際の間隔。負の値も指定可。 | ||
| fill_method | str | ‘pad’ |
| NaN の補間方法 | ||
| limit | int | None |
| この値より NaN が連続した場合は補間を行いません。 | ||
| freq | DateOffset, timedelta, or str, optional | |
| 時系列データの場合の差分をとる間隔 | ||
| **kwargs | ||
| DataFrame.shift に渡す引数 | ||
返り値
| 名前 | 説明 |
|---|---|
| chgSeries or DataFrame | 差分結果 |
サンプルコード
In [6]:
X = np.array([[1, 2, 3], [2, 4, 6], [3, 6, 9], [4, 8, 12]])
df = pd.DataFrame(X)
df
| 0 | 1 | 2 | |
|---|---|---|---|
| 0 | 1 | 2 | 3 |
| 1 | 2 | 4 | 6 |
| 2 | 3 | 6 | 9 |
| 3 | 4 | 8 | 12 |
axis – 差分をとる方向を指定する
In [7]:
df.pct_change(axis=0)
| 0 | 1 | 2 | |
|---|---|---|---|
| 0 | NaN | NaN | NaN |
| 1 | 1.000000 | 1.000000 | 1.000000 |
| 2 | 0.500000 | 0.500000 | 0.500000 |
| 3 | 0.333333 | 0.333333 | 0.333333 |
In [8]:
df.pct_change(axis=1)
| 0 | 1 | 2 | |
|---|---|---|---|
| 0 | NaN | 1.0 | 0.5 |
| 1 | NaN | 1.0 | 0.5 |
| 2 | NaN | 1.0 | 0.5 |
| 3 | NaN | 1.0 | 0.5 |
periods – 差分をとる間隔を指定する
In [9]:
df.pct_change(periods=2)
| 0 | 1 | 2 | |
|---|---|---|---|
| 0 | NaN | NaN | NaN |
| 1 | NaN | NaN | NaN |
| 2 | 2.0 | 4.0 | 6.0 |
| 3 | 2.0 | 4.0 | 6.0 |
In [10]:
df.pct_change(periods=-1)
| 0 | 1 | 2 | |
|---|---|---|---|
| 0 | -0.500000 | -0.500000 | -0.500000 |
| 1 | -0.333333 | -0.333333 | -0.333333 |
| 2 | -0.250000 | -0.250000 | -0.250000 |
| 3 | NaN | NaN | NaN |
pandas.Series.diff
pandas.Series.diff は、値の変化量を計算します。
Series.diff(self, periods=1)
引数
| 名前 | 型 | デフォルト値 |
|---|---|---|
| periods | int | 1 |
| 差分をとる際の間隔。負の値も指定可。 | ||
返り値
| 名前 | 説明 |
|---|---|
| Series | 差分結果 |
サンプルコード
In [11]:
s = pd.Series([1, 3, 5, 6, 7])
print(s.diff())
0 NaN 1 2.0 2 2.0 3 1.0 4 1.0 dtype: float64
pandas.Series.pct_change
pandas.Series.pct_change は、値の変化率を計算します。
Series.pct_change(self: ~ FrameOrSeries, periods=1, fill_method='pad', limit=None, freq=None, **kwargs) → ~FrameOrSeries
引数
| 名前 | 型 | デフォルト値 |
|---|---|---|
| periods | int | 1 |
| 差分をとる際の間隔。負の値も指定可。 | ||
| fill_method | str | ‘pad’ |
| NaN の補間方法 | ||
| limit | int | None |
| この値より NaN が連続した場合は補間を行いません。 | ||
| freq | DateOffset, timedelta, or str, optional | |
| 時系列データの場合の差分をとる間隔 | ||
| **kwargs | ||
| Series.shift に渡す引数 | ||
返り値
| 名前 | 説明 |
|---|---|
| Series | 差分結果 |
サンプルコード
In [12]:
s = pd.Series([1, 3, 5, 6, 7])
print(s.pct_change())
0 NaN 1 2.000000 2 0.666667 3 0.200000 4 0.166667 dtype: float64

コメント