2017-11-17 8 views
1

私はこのようなデータフレーム持っている:私はすべての重複が同じ件名を有するものとして定義される重複、動詞、オブジェクト、および滝をドロップしたいパンダ:日付の範囲内にドロップ重複

Subject Verb Object Date 
--------------------------------- 
Bill Ate  Food 7/11/2015 
Steve Painted House 8/12/2011 
Bill Ate  Food 7/13/2015 
Steve Painted House 8/25/2011 

をX日の範囲内で(私の例では5日間)。

Subject Verb Object Date 
--------------------------------- 
Bill Ate  Food 7/11/2015 
Steve Painted House 8/12/2011 
Steve Painted House 8/25/2011 

"Steve - Painted - House"のインスタンスは5日間のウィンドウの外にあるため削除されません。

データ構造とiterrowsメソッドを使用してこれを行うことができますが、Pandas drop_duplicatesを使用してこれを行う方法はありますか?

答えて

2

groupbyと組み合わせてduplicated + diffを使用して、削除する行を特定します。これは、重複した基準に含まれていないデータフレーム内の他の列が存在することができますよう、あなたがdf.columns.differenceを呼び出すことはありません

c = ['Subject', 'Verb', 'Object'] 

def f(x): 
    return x[c].duplicated() & x.Date.diff().dt.days.lt(5) 

df = df.sort_values(c) 
df[~df.groupby(c).apply(f).values] 

    Subject  Verb Object  Date 
0 Bill  Ate Food 2015-07-11 
1 Steve Painted House 2011-08-12 
3 Steve Painted House 2011-08-25 
+0

編集したバージョンは、改善されます。 – mikeronayne

+0

@mikeronayneありがとう、私はあなたのためにそれが良いことを望んで私の答えをリファクタリングしました。 :) –

+0

多分 'np.close'? – Wen