2017-06-28 9 views
0

私は重複と更新日を持つデータフレームを持っています。開始日: Sample Dataパンダのデータフレームの重複除外と最新のレコードの取得

私が探しているのは、重複を削除して最新のレコードを取得する方法です。私はdrop_duplicates()について知っているが、それは100%同一の行しかドロップしない。私はこのようなものを試してみました enter image description here

:だから、所望の出力は次のようになり

grouped = df.groupby(['First Name', 'Middle Name','Last Name','Job Title','Active','Contractor']) 
new_data = grouped['Update Date'].agg(np.max).to_frame().reset_index() 

をしかし、その後の最大を取るすべての列でグループ化するよりも、これを行うためのより良い方法が存在しなければなりません更新日。 特定の列でグループ化し、最大更新日を取得する場合はどうすればよいですか?しかし、グループ化されなかった他の列を取ることもできます。

たとえば、First、middle、およびlast nameでグループ化し、最新のレコードのレコード全体を取得します。

入力:enter image description here

所望の出力。 enter image description here

ありがとうございました!

+0

を。私はここで、最初、中期、そして最後にその人を一意に識別すると仮定しています。同じ名前の人が2人いる場合や、名前の変更があった場合はどうなりますか?これらのことをまず考えなければなりません。 –

+0

いずれにしても、グループ化して最新のレコードを取得する方法を見つける必要があります – Zander

+1

将来的には、データフレームのコードバージョン( 'df = ....')を提供すれば、それをペーストします。写真はきれいに見えますが、あなたのようなデータフレームを扱うのには役立ちません。 – chthonicdaemon

答えて

1

私のコメントにもかかわらず、データフレーム全体を最初に注文してから、すべてのグループの最初の行を取ることができます。

df = df.sort_values('Update Date', ascending=False) 
df.groupby(['First Name', 'Middle Name','Last Name']).first().reset_index() 
+0

それは魅力的に機能しました! – Zander

3

drop_duplicatessubset引きとります。それは一意に一人一人を識別するキーを持っていることが最善であるかもしれない

ident_fields = ['First Name', 'Middle Name','Last Name'] 
df = (df.sort_values('Update Date') 
     .drop_duplicates(subset=ident_fields, keep='last')) 
関連する問題