Pythonモジュール「Pandas」のdiffメソッドで行・列の差分を計算する件についてまとめました。
【diff】行同士の差分を計算
pandasでは、diffメソッドで行同士の差分を計算できます。
引数で○行前後と差分を取るか指定できます。
# -*- coding: utf-8 -*-
import pandas as pd
# データ(辞書型)
data_dict = {
'time' : [1, 2, 3, 4, 5],
'temp1' : [25, 26, 29, 28, 27],
'temp2' : [27, 29, 34, 32, 31]
}
# データフレームの初期化
df = pd.DataFrame(data_dict)
print(df)
"""
time temp1 temp2
0 1 25 27
1 2 26 29
2 3 29 34
3 4 28 32
4 5 27 31
"""
# 1行前の値との差分を計算
print(df.diff())
"""
time temp1 temp2
0 NaN NaN NaN
1 1.0 1.0 2.0
2 1.0 3.0 5.0
3 1.0 -1.0 -2.0
4 1.0 -1.0 -1.0
"""
# 2行前の値との差分を計算
print(df.diff(2))
"""
time temp1 temp2
0 NaN NaN NaN
1 NaN NaN NaN
2 2.0 4.0 7.0
3 2.0 2.0 3.0
4 2.0 -2.0 -3.0
"""
# 2行後の値との差分を計算
print(df.diff(-2))
"""
time temp1 temp2
0 -2.0 -4.0 -7.0
1 -2.0 -2.0 -3.0
2 -2.0 2.0 3.0
3 NaN NaN NaN
4 NaN NaN NaN
"""
特定の列のみ(Series)で差分を求めることもできます。
# -*- coding: utf-8 -*-
import pandas as pd
# データ(辞書型)
data_dict = {
'time' : [1, 2, 3, 4, 5],
'temp1' : [25, 26, 29, 28, 27],
'temp2' : [27, 29, 34, 32, 31]
}
# データフレームの初期化
df = pd.DataFrame(data_dict)
print(df)
"""
time temp1 temp2
0 1 25 27
1 2 26 29
2 3 29 34
3 4 28 32
4 5 27 31
"""
# 1列前の値との差分を計算
df["diff_time"] = df["time"].diff()
# 1行後の値との差分を計算
df["diff_temp1"] = df["temp1"].diff(-1)
print(df)
"""
time temp1 temp2 diff_time diff_temp1
0 1 25 27 NaN -1.0
1 2 26 29 1.0 -3.0
2 3 29 34 1.0 1.0
3 4 28 32 1.0 1.0
4 5 27 31 1.0 NaN
"""
【diff】列同士の差分を計算
diffメソッドの引数axisで「1」を指定すると列士の差分を計算できます。
引数で○列前後と差分を取るか指定できます。
# -*- coding: utf-8 -*-
import pandas as pd
# データ(辞書型)
data_dict = {
'time' : [1, 2, 3, 4, 5],
'temp1' : [25, 26, 29, 28, 27],
'temp2' : [27, 29, 34, 32, 31]
}
# データフレームの初期化
df = pd.DataFrame(data_dict)
print(df)
"""
time temp1 temp2
0 1 25 27
1 2 26 29
2 3 29 34
3 4 28 32
4 5 27 31
"""
# 1列前の値との差分を計算
print(df.diff(axis=1))
"""
time temp1 temp2
0 NaN 24.0 2.0
1 NaN 24.0 3.0
2 NaN 26.0 5.0
3 NaN 24.0 4.0
4 NaN 22.0 4.0
"""
# 2列前の値との差分を計算
print(df.diff(2, axis=1))
"""
time temp1 temp2
0 NaN NaN 26.0
1 NaN NaN 27.0
2 NaN NaN 31.0
3 NaN NaN 28.0
4 NaN NaN 26.0
"""
# 2列後の値との差分を計算
print(df.diff(-2, axis=1))
"""
time temp1 temp2
0 -26.0 NaN NaN
1 -27.0 NaN NaN
2 -31.0 NaN NaN
3 -28.0 NaN NaN
4 -26.0 NaN NaN
"""
【pct_change】行・列同士の変化率を計算
pct_changeメソッドで○行・列前後との変化率を計算できます。
# -*- coding: utf-8 -*-
import pandas as pd
# データ(辞書型)
data_dict = {
'time' : [1, 2, 3, 4, 5],
'temp1' : [25, 26, 29, 28, 27],
'temp2' : [27, 29, 34, 32, 31]
}
# データフレームの初期化
df = pd.DataFrame(data_dict)
print(df)
"""
time temp1 temp2
0 1 25 27
1 2 26 29
2 3 29 34
3 4 28 32
4 5 27 31
"""
# 1行前との変化率を計算
print(df.pct_change())
"""
time temp1 temp2
0 NaN NaN NaN
1 1.000000 0.040000 0.074074
2 0.500000 0.115385 0.172414
3 0.333333 -0.034483 -0.058824
4 0.250000 -0.035714 -0.031250
"""
# 1行前との変化率を計算(time列のみ)
df["pct_change_time"] = df["time"].pct_change()
# 1行前との変化率を計算(temp1列のみ)
df["pct_change_temp1"] = df["temp1"].pct_change()
print(df)
"""
time temp1 temp2 pct_change_time pct_change_temp1
0 1 25 27 NaN NaN
1 2 26 29 1.000000 0.040000
2 3 29 34 0.500000 0.115385
3 4 28 32 0.333333 -0.034483
4 5 27 31 0.250000 -0.035714
"""
関連ページ

【Pandas入門】使い方とサンプル集
Pythonモジュール「Pandas」でデータ分析する方法についてサンプルコード付きで入門者向けに解説します。

コメント