2016-07-26 15 views
3

に基づいSOME重複する値を削除します。パンダ:私はデータセット持っている条件

id url  keep_if_dup 
1  A.com Yes 
2  A.com Yes 
3  B.com No 
4  B.com No 
5  C.com No 

を、私は、重複を削除すなわち「URL」フィールドの最初の発生を保つ、しかしフィールド「keep_if_dup場合は重複を維持したいです"はYESです。

予想される出力:

id url  keep_if_dup 
1  A.com Yes 
2  A.com Yes 
3  B.com No 
5  C.com No 

私が試したもの:もちろん考慮されていません

Dataframe=Dataframe.drop_duplicates(subset='url', keep='first') 

"keep_if_dup" フィールド。出力は次のとおりです。

id url  keep_if_dup 
1  A.com Yes 
3  B.com No 
5  C.com No 

答えて

3

最初はCOL「keep_if_dup」==は「はい」、これはかどうかの反転ブールマスクで(|を使用して)or EDであるすべての行を保持し、locに複数のブール条件を渡すことができますCOL 'URL' 欄には、重複したりされていません。

df = df.loc[(df['keep_if_dup'] =='Yes') | ~df['url'].duplicated()] 

壊すdは:

In [79]: 
df.loc[(df['keep_if_dup'] =='Yes') | ~df['url'].duplicated()] 

Out[79]: 
    id url keep_if_dup 
0 1 A.com   Yes 
1 2 A.com   Yes 
2 3 B.com   No 
4 5 C.com   No 

が戻って自己割り当てあなたのDFを上書きします上記の2つのブール型マスクを示しています:

In [80]: 
~df['url'].duplicated() 

Out[80]: 
0  True 
1 False 
2  True 
3 False 
4  True 
Name: url, dtype: bool 

In [81]: 
df['keep_if_dup'] =='Yes' 

Out[81]: 
0  True 
1  True 
2 False 
3 False 
4 False 
Name: keep_if_dup, dtype: bool 
+0

このコマンドは「df」データフレームを変更しますか?df = df.loc [...]これを保存する必要がありますか? – Vincent

+0

あなたのdfを上書きしたい場合は自己割り当てをして戻したいので 'df = df.loc ....' – EdChum

+0

あなたの答えを編集していただきありがとうございました – Vincent

関連する問題