日付の新しい方を残す重複排除やり方をまとめました。重複排除するルールとして、❶新しいものを残す。❷古い方を残す。といった一工夫が必要な場合があります。そのステップをまとめました。 概要は以下のとおりです。

概要
  1. keep='first' でデータフレームを上から下へ重複チェックするとして、最初のものを残す
  2. 新しいものが最初にチェックされるよう降順に並べ替える

Step 1:datetime オブジェクトの確認

日付の列でソートするには、その列がdatetime オブジェクトでなければなりません。まず、ソートする列のデータ型を確認します。

1
2
3
4
5
6
7
8
# データ型を確認する

df['date'].dtypes

>> dtype('<M8[ns]')  --> OK
>> dtype('O')  --------> NG  datetime 型式にする必要ある
>> dtype('int64')  ----> NG  datetime 型式にする必要ある
>> dtype('float64') ---> NG  datetime 型式にする必要ある

NGの場合には、datetime オブジェクトにします。

1
2
3
# データ型をdatetime にする

df['date']=pd.to_datetime(df['date'])

Step 2:新しい順に並び替える

1
2
3
# ascending = False -> 値の大きい順、日付けの新しい順 

df = df.sort_values(["date"], ascending = False)

列名dateで新しい順に並び替えておく。

ascending = False » 降順 » 新しいものから古いもの

Point!
ascending の意味:上昇
ascending = True
昇順 古いものから新しいものへ 小さいものから大きいものへ
ascending = False
降順 新しいものから古いものへ 大きいものから小さいものへ

Step 3:列A(例:社員番号)の重複排除の基準として新しいものを残す

1
2
3
4
5
6
7
# 新しいものが最初にソートされているので、keep='first'とする
# inplace=True で上書きする
# 前後にdf.shapeで要素数をプリントし排除された数を把握する

print(df.shape)
df.drop_duplicates(subset='社員番号', keep='first', inplace=True)
print(df.shape)