Pythonでデータフレームから最初の重複行を削除する方法
Pythonのpandasライブラリを使うと、データフレーム内の重複行を簡単に削除できます。本記事では、drop_duplicates()関数を使って、特定のカラム(IdとAge)に基づく重複行のうち、最初に出現する行を削除し、最後の行を残す方法を解説します。
処理結果のイメージ
例として、次のようなデータフレームがあるとします。この中から最初の重複行を削除すると、結果は以下のようになります。
Id Age 0 1 12 3 4 13 4 5 14 5 6 12 6 2 13 7 7 16 8 3 14 9 9 15 10 10 14
解決手順
この問題を解決するには、以下の手順に従います。
- データフレームを定義します。
drop_duplicates()関数をId列とAge列に対して適用し、引数keepに「'last'」を指定します。これにより、重複している行のうち最後の行が保持され、それ以前の重複行が削除されます。- 結果を同じデータフレームに格納し、出力します。
df.drop_duplicates(subset=['Id','Age'],keep='last')
実装例
より理解を深めるために、実際のコードを見てみましょう。
import pandas as pd
df = pd.DataFrame({'Id':[1,2,3,4,5,6,2,7,3,9,10],
'Age':[12,13,14,13,14,12,13,16,14,15,14]
})
print("DataFrame is:\n",df)
df = df.drop_duplicates(subset=['Id','Age'],keep='last')
print("Dataframe after removing first duplicate rows:\n", df)実行結果
DataFrame is: Id Age 0 1 12 1 2 13 2 3 14 3 4 13 4 5 14 5 6 12 6 2 13 7 7 16 8 3 14 9 9 15 10 10 14 Dataframe after removing first duplicate rows: Id Age 0 1 12 3 4 13 4 5 14 5 6 12 6 2 13 7 7 16 8 3 14 9 9 15 10 10 14
ポイント解説
- subset引数: 重複を判定する対象のカラムを指定します。ここでは「Id」と「Age」の両方が一致する行を重複とみなしています。省略した場合は、すべてのカラムが判定対象になります。
- keep='last': 重複行の中で最後に出現する行を残し、それ以外(最初の重複行)を削除します。デフォルトは「'first'」で、その場合は最初の行が残ります。また、「False」を指定すると重複する行をすべて削除できます。
- インデックスについて: 削除後も元のインデックス番号(0、3、4…)が保持される点に注意してください。連番に振り直したい場合は、
reset_index(drop=True)を組み合わせると便利です。
-
Pythonでリストから重複して出現する要素を削除し、一意な要素だけを抽出する方法
はじめに 数値のリスト nums が与えられたとき、リスト内に複数回出現する要素を削除し、一度だけ出現する要素だけを、元のリストでの出現順序を保ったまま残すことを考えます。 例えば、入力が nums = [2, 4, 6, 1, 4, 6, 9] の場合、出力は [2, 1, 9] となります。これは、2・1・9 の3つの要素がそれぞれ一度しか登場しておらず、4 と 6 は2回ずつ出現しているため除外されるからです。 解決のアプローチ この問題は、各要素の出現回数を記録する辞書(ハッシュマップ)を使うことで効率的に解決できます。手順は以下の通りです。 出現回数をカウントするための空の辞書を
-
Pythonでバイナリ行列の重複行を検出!Counterを使った効率的な実装方法
0と1だけで構成されるバイナリ行列が与えられたとき、その中から重複する行を見つけて出力するのが本記事の目的です。Pythonでは標準ライブラリの collections.Counter() を活用することで、この問題を簡潔かつ効率的に解決できます。 実行例 入力:1 1 1 10 0 0 01 1 1 10 0 0 0出力:(1, 1, 1, 1)(0, 0, 0, 0) アルゴリズムの手順 0と1のみで構成されたバイナリ行列を作成します。 辞書には「行」をキー、「その出現頻度」を値として格納します。リストは変更可能(ミュータブル)なため、まず各行をタプルに変換しておきます。 Count