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

Python Pandas – subsetを指定してdrop_duplicates()で重複値の最後のエントリのみを表示する方法

重複する値の中から最後のエントリのみを表示したい場合は、drop_duplicates() メソッドの keep パラメータに 'last' を指定します。drop_duplicates() は、DataFrame内の重複行を削除するためのメソッドです。

DataFrameの作成

まずは、「Car(車種)」「Place(地域)」「UnitsSold(販売台数)」の3つの列を持つDataFrameを作成しましょう。

import pandas as pd

dataFrame = pd.DataFrame({
   'Car': ['BMW', 'Mercedes', 'Lamborghini', 'BMW', 'Mercedes', 'Porsche'],
   'Place': ['Delhi', 'Hyderabad', 'Chandigarh', 'Delhi', 'Hyderabad', 'Mumbai'],
   'UnitsSold': [85, 70, 80, 95, 55, 90]
})

重複行の削除と最後のエントリの表示

keep パラメータに "last" を設定すると、各重複グループの最後のエントリが残り、それ以外の重複行はすべて削除されます。さらに、「subset」パラメータを使用することで、重複判定の対象となる列(サブセット)を指定できます。ここでは「Car」と「Place」の組み合わせを重複判定の基準としています。

また、reset_index(drop=True) を呼び出すことで、行を削除した後にインデックスを0から振り直し、きれいな連番のインデックスに整えています。

dataFrame2 = dataFrame.drop_duplicates(subset=['Car', 'Place'], keep='last').reset_index(drop=True)

完全なコード例

以下に、一連の処理をまとめた完全なコードを示します。

import pandas as pd

# DataFrameを作成
dataFrame = pd.DataFrame({
   'Car': ['BMW', 'Mercedes', 'Lamborghini', 'BMW', 'Mercedes', 'Porsche'],
   'Place': ['Delhi', 'Hyderabad', 'Chandigarh', 'Delhi', 'Hyderabad', 'Mumbai'],
   'UnitsSold': [85, 70, 80, 95, 55, 90]
})

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

# 重複を削除し、最後のエントリのみを表示
# keepパラメータに "last" を設定
# 最後のエントリ以外の重複行は削除される
# subsetパラメータでサブセット(重複判定対象の列)を指定
dataFrame2 = dataFrame.drop_duplicates(subset=['Car', 'Place'], keep='last').reset_index(drop=True)
print("\n重複削除後の更新されたDataFrame...\n", dataFrame2)

実行結果

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

Dataframe...
          Car       Place  UnitsSold
0         BMW       Delhi         85
1    Mercedes   Hyderabad         70
2  Lamborghini  Chandigarh         80
3         BMW       Delhi         95
4    Mercedes   Hyderabad         55
5     Porsche      Mumbai         90

重複削除後の更新されたDataFrame...
           Car       Place  UnitsSold
0  Lamborghini  Chandigarh         80
1          BMW       Delhi         95
2     Mercedes   Hyderabad         55
3      Porsche      Mumbai         90

解説

元のDataFrameでは、「BMW & Delhi」の組み合わせが2回(販売台数85と95)、「Mercedes & Hyderabad」の組み合わせも2回(70と55)登場しています。keep='last' を指定したため、それぞれの組み合わせについて後から出現した行(BMW & Delhi の95、Mercedes & Hyderabad の55)だけが残りました。

なお、keep パラメータには他にも以下の値を指定できます。

  • 'first':最初に出現したエントリを残す(デフォルト)
  • 'last':最後に出現したエントリを残す
  • False:重複している行をすべて削除する

このように、subsetkeep を組み合わせることで、柔軟に重複データの制御が可能になります。

  1. Python Pandas – iloc()でインデックスに基づいて特定の値を選択しサブセットを作成する方法

    Pandasでインデックス(位置番号)に基づいて列から特定の値を選択し、サブセット(DataFrameの一部)を作成するには、iloc()メソッドを使用します。ilocは「integer location」の略で、行番号や列番号といった整数位置を指定してデータを抽出できる便利なメソッドです。 まず、pandasライブラリをインポートします。 import pandas as pd 次に、商品レコードを含むPandas DataFrameを作成します。このDataFrameには「Product(商品名)」「Opening_Stock(期首在庫)」「Closing_Stock(期末在庫)」の3つの

  2. Python Pandas – データフレームのインデックスをマルチインデックス形式で表示する方法

    Pandas のデータフレームでインデックスをマルチインデックス(MultiIndex)形式で表示するには、dataframe.index を使用します。まずは、リストからなる辞書を作成してみましょう。 # リストの辞書 d = {Car: [BMW, Lexus, Audi, Mercedes, Jaguar, Bentley], Date_of_purchase: [2020-10-10, 2020-10-12, 2020-10-17, 2020-10-16, 2020-10-19, 2020-10-22]} 上記の辞書をもとに、DataFrame を作成します。 dataFra