日付の新しい方を残す重複排除やり方をまとめました。重複排除するルールとして、❶新しいものを残す。❷古い方を残す。といった一工夫が必要な場合があります。そのステップをまとめました。 概要は以下のとおりです。
- keep='first' でデータフレームを上から下へ重複チェックするとして、最初のものを残す
- 新しいものが最初にチェックされるよう降順に並べ替える
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 » 降順 » 新しいものから古いもの
- 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)