Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python – pandasのDataFrameから重複していない値のみを抽出・表示する方法

pandasのDataFrameには、同じ値が複数回出現することがあります。この記事では、duplicated()メソッドと論理否定演算子(~)を組み合わせて、重複していない値(ユニークな行)のみを抽出して表示する方法を解説します。

重複データを含むDataFrameの作成

まず、重複する値を含むDataFrameを作成します。ここでは「Student」列と「Result」列の2列を持つ学生の成績データを例にします。

import pandas as pd

dataFrame = pd.DataFrame(
    {
        "Student": ['Jack', 'Robin', 'Ted', 'Robin', 'Scarlett', 'Kat', 'Ted'],
        "Result": ['Pass', 'Fail', 'Pass', 'Fail', 'Pass', 'Pass', 'Pass']
    }
)

上記のデータを見ると、「Robin」と「Ted」がそれぞれ2回登場しており、重複が含まれていることがわかります。

duplicated()メソッドと論理否定演算子による抽出

重複していない値のみを表示するには、duplicated()メソッドと論理否定演算子(~)を組み合わせます。

dataFrame[~dataFrame.duplicated('Student')]

仕組みの解説

  • duplicated('Student'):'Student'列に重複が存在する行に対して True を返します(初回出現は False)。
  • ~(論理否定):True / False を反転させ、重複していない行のみが True になります。
  • このブールマスクをDataFrameに適用することで、重複のない行だけが抽出されます。

完全なサンプルコード

以下が実行可能なコード全体です。

import pandas as pd

# DataFrameを作成
dataFrame = pd.DataFrame(
    {
        "Student": ['Jack', 'Robin', 'Ted', 'Robin', 'Scarlett', 'Kat', 'Ted'],
        "Result": ['Pass', 'Fail', 'Pass', 'Fail', 'Pass', 'Pass', 'Pass']
    }
)

print("DataFrame ...\n", dataFrame)

# 重複していない値のみを表示
res = dataFrame[~dataFrame.duplicated('Student')]
print("\n重複を除外した後のDataFrame ...\n", res)

実行結果

上記のコードを実行すると、次のような出力が得られます。

DataFrame ...
     Result   Student
0    Pass      Jack
1    Fail     Robin
2    Pass       Ted
3    Fail     Robin
4    Pass  Scarlett
5    Pass       Kat
6    Pass       Ted

重複を除外した後のDataFrame ...
     Result   Student
0    Pass      Jack
1    Fail     Robin
2    Pass       Ted
4    Pass  Scarlett
5    Pass       Kat

結果を見ると、インデックス3(Robinの2回目)と6(Tedの2回目)の行が除外され、各学生の最初の出現行だけが残っていることが確認できます。

補足:drop_duplicates()との違い

同様の処理は dataFrame.drop_duplicates(subset='Student') でも実現できます。duplicated() + ~ の方法はブールマスクとして他の条件と組み合わせられる柔軟性がある一方、単純に重複行を削除したい場合は drop_duplicates() の方が簡潔です。また、duplicated() には keep='last'keep=False といった引数があり、残す行を「最初の出現」「最後の出現」「すべての重複」から選択できます。

  1. Python Pandasでnull以外の値を前方へ転送する方法(ffillの使い方)

    Pandasのfillna()で欠損値(NaN)を前方向きに埋める Pandasでは、fillna()メソッドのmethodパラメータを使うことで、null以外の値を前方(上の行から下の行へ)に転送できます。前方補完(forward fill)を行うには、値としてffillを指定します。 fillna(method=ffill) なお、Pandas 2.1以降ではmethod引数は非推奨となっているため、専用メソッドのffill()を使うことが推奨されています。どちらも同じ結果が得られます。 サンプルデータの準備 ここでは、一部のセルにNaN(欠損値)を含むCSVファイル「SalesData.

  2. 【Python Pandas】fillnaで欠損値(NaN)を後方の値で埋める方法(bfill)

    はじめに PandasのDataFrameには、データの読み込みミスや入力漏れなどによって欠損値(NaN)が含まれることがあります。このような欠損値を処理する方法のひとつが、「後ろにある有効な値を前方向きに引き継いで埋める」という後方補完(Backward Fill)です。 本記事では、fillna()メソッドのmethodパラメータにbfillを指定して、null以外の値を後方から伝播させる方法を解説します。 bfillの基本的な使い方 後方補完を行うには、fillna()メソッドの引数に以下のように指定します。 fillna(method=bfill) bfillは「backward f