ウェブサイト検索

Pandas 重複行の削除 - drop_duplicates() 関数


Pandasのdrop_duplicates()関数の構文

Pandasのdrop_duplicates()関数は、DataFrameから重複した行を削除します。その構文は次の通りです:

drop_duplicates(self, subset=None, keep="first", inplace=False)
  • subset: 重複行を特定するために考慮する列ラベルまたはラベルのシーケンス。デフォルトでは、すべての列が重複行を見つけるために使用されます。
  • keep: 許可される値は {‘first’, ‘last’, False} で、デフォルトは ‘first’ です。‘first’ の場合、最初の行を除いて重複している行が削除されます。‘last’ の場合、最後の行を除いて重複している行が削除されます。False の場合、すべての重複している行が削除されます。
  • inplace: Trueの場合、元のDataFrameは変更され、Noneが返されます。デフォルトでは、元のDataFrameは変更されず、新しいDataFrameインスタンスが返されます。

Pandasの重複行を削除する例

DataFrameオブジェクトから重複行を削除するいくつかの例を見てみましょう。

1. 重複行を削除して最初の行を保持する

引数が渡されない場合のデフォルトの動作です。

import pandas as pd

d1 = {'A': [1, 1, 1, 2], 'B': [2, 2, 2, 3], 'C': [3, 3, 4, 5]}

source_df = pd.DataFrame(d1)
print('Source DataFrame:\n', source_df)

keep first duplicate row
result_df = source_df.drop_duplicates()
print('Result DataFrame:\n', result_df)

出力 :

Source DataFrame:
    A  B  C
0  1  2  3
1  1  2  3
2  1  2  4
3  2  3  5
Result DataFrame:
    A  B  C
0  1  2  3
2  1  2  4
3  2  3  5

ソースデータフレームの行0と1は重複しています。最初の出現が保持され、その他の重複は削除されます。

2. 重複を削除して最後の行を保持する

result_df = source_df.drop_duplicates(keep='last')
print('Result DataFrame:\n', result_df)

出力 :

Result DataFrame:
    A  B  C
1  1  2  3
2  1  2  4
3  2  3  5

インデックス「0」が削除され、最後の重複行「1」が出力に保持されます。

3. データフレームからすべての重複した行を削除する

result_df = source_df.drop_duplicates(keep=False)
print('Result DataFrame:\n', result_df)

出力 :

Result DataFrame:
    A  B  C
2  1  2  4
3  2  3  5

複製された行「0」と「1」の両方が結果のDataFrameから削除されます。

4. 特定の列に基づいて重複行を特定する

import pandas as pd

d1 = {'A': [1, 1, 1, 2], 'B': [2, 2, 2, 3], 'C': [3, 3, 4, 5]}

source_df = pd.DataFrame(d1)
print('Source DataFrame:\n', source_df)

result_df = source_df.drop_duplicates(subset=['A', 'B'])
print('Result DataFrame:\n', result_df)

出力 :

Source DataFrame:
    A  B  C
0  1  2  3
1  1  2  3
2  1  2  4
3  2  3  5
Result DataFrame:
    A  B  C
0  1  2  3
3  2  3  5

「A」と「B」の列は重複行を特定するために使用されます。したがって、行0、1、2は重複です。したがって、行1と2は出力から削除されます。

5. 重複行をそのまま削除する

source_df.drop_duplicates(inplace=True)
print(source_df)

出力 :

   A  B  C
0  1  2  3
2  1  2  4
3  2  3  5

参考文献

  • Python Pandasモジュールチュートリアル
  • Pandas DataFrameのdrop_duplicates() APIドキュメント

関連記事: