プログラミング初心者でもわかる pandas.Series.compare 解説


基本的な使い方

import pandas as pd

# データの準備
s1 = pd.Series([10, 20, 30, 40, 50])
s2 = pd.Series([10, 20, 30, 40, 60])

# Series同士の比較
result = s1.compare(s2)
print(result)

このコードを実行すると、以下のような結果が出力されます。

0    eq
1    eq
2    eq
3    eq
4   ne
dtype: object
  • ne:要素が一致していない
  • eq:要素が一致している

比較方法の指定

compare関数には、比較方法を指定するオプション引数があります。引数で指定できるオプションは以下の通りです。

  • keep_alive:比較対象外の列を保持するかどうか(デフォルトはFalse
  • method:比較方法(デフォルトは'eq'
    • 'eq':要素が等しいかどうかを比較
    • 'ne':要素が異なるかどうかを比較
    • 'lt':左側が小さいかどうかを比較
    • 'gt':左側が大きいかどうかを比較
    • 'le':左側が小さいか等しいかどうかを比較
    • 'ge':左側が大きいか等しいかどうかを比較
# 比較方法の指定
result = s1.compare(s2, method='gt')
print(result)
0    False
1    False
2    False
3    False
4     True
dtype: object

compare関数には、比較結果に基づいて差分を抽出するオプション引数もあります。引数で指定できるオプションは以下の通りです。

  • diff:比較結果に基づいて差分を抽出するかどうか(デフォルトはFalse
# 差分の抽出
result = s1.compare(s2, diff=True)
print(result)
Series([nan, nan, nan, nan, 10], dtype: float64)

この結果、s2の最後の要素がs1と異なることが確認できます。



例 1:2つの Series を比較して、要素ごとに一致、不一致、差異を確認する

import pandas as pd

# データの準備
s1 = pd.Series([10, 20, 30, 40, 50])
s2 = pd.Series([10, 20, 30, 40, 60])

# Series同士の比較
result = s1.compare(s2)
print(result)

このコードを実行すると、以下の結果が出力されます。

0    eq
1    eq
2    eq
3    eq
4   ne
dtype: object
  • ne:要素が一致していない
  • eq:要素が一致している

例 2:比較方法を指定して、左側が大きい要素を確認する

# 比較方法の指定
result = s1.compare(s2, method='gt')
print(result)
0    False
1    False
2    False
3    False
4     True
dtype: object

例 3:差分を抽出する

# 差分の抽出
result = s1.compare(s2, diff=True)
print(result)
Series([nan, nan, nan, nan, 10], dtype: float64)

pandas.Series.compare 関数は、DataFrame同士の比較にも使用できます。DataFrame同士を比較する場合は、列ごとに比較を行います。

import pandas as pd

# データの準備
df1 = pd.DataFrame({'A': [10, 20, 30], 'B': [40, 50, 60]})
df2 = pd.DataFrame({'A': [10, 20, 30], 'B': [40, 50, 70], 'C': [70, 80, 90]})

# DataFrame同士の比較
result = df1.compare(df2)
print(result)
          A         B
0  eq      ne  ne
1  eq      ne  ne
2  eq      ne  ne
dtype: object


算術演算子

単純な比較であれば、算術演算子を使用して比較することができます。

import pandas as pd

# データの準備
s1 = pd.Series([10, 20, 30, 40, 50])
s2 = pd.Series([10, 20, 30, 40, 60])

# 要素ごとの比較
result = s1 == s2
print(result)
0     True
1     True
2     True
3     True
4    False
dtype: bool

numpy.array を使用する

pandas.Series オブジェクトを numpy.array に変換してから比較することもできます。

import pandas as pd
import numpy as np

# データの準備
s1 = pd.Series([10, 20, 30, 40, 50])
s2 = pd.Series([10, 20, 30, 40, 60])

# numpy.arrayへの変換
arr1 = s1.to_numpy()
arr2 = s2.to_numpy()

# 比較
result = arr1 == arr2
print(result)

このコードを実行すると、pandas.Series.compare と同様の結果が出力されます。

特定の条件で比較する

pandas.Series.apply メソッドを使用して、特定の条件に基づいて要素ごとに比較することができます。

import pandas as pd

# データの準備
s1 = pd.Series([10, 20, 30, 40, 50])
s2 = pd.Series([10, 20, 30, 40, 60])

# 特定の条件で比較
def compare(x, y):
    if x == y:
        return '一致'
    elif x < y:
        return '左側が小さい'
    else:
        return '右側が大きい'

result = s1.apply(lambda x, y: compare(x, y), y=s2)
print(result)
0    一致
1    一致
2    一致
3    一致
4   右側が大きい
dtype: object

カスタム関数を使用する

上記の方法に加えて、独自の比較ロジックを実装するカスタム関数を作成することもできます。

import pandas as pd

# データの準備
s1 = pd.Series([10, 20, 30, 40, 50])
s2 = pd.Series([10, 20, 30, 40, 60])

# カスタム比較関数
def compare_custom(x, y):
    # 独自の比較ロジックを実装
    if x % 2 == 0 and y % 3 == 0:
        return '条件一致'
    else:
        return '不一致'

# 比較結果の取得
result = s1.apply(compare_custom, y=s2)
print(result)