2016-11-29 82 views
2

我有一大組數據,我試圖刪除基於2個字段的重複項。樣本集:基於來自熊貓的另一個字段的優先級列表刪除1字段上的重複項

WOE_ID ISO Locationname Language Placetype Parent_ID ID Username 
2347578 US Maine   ENG   State  23424977 1 sampleuser 
2444322 US Maine   ENG   Town  12588275 1 sampleuser 
2444324 US Maine   ENG   Town  12588852 1 sampleuser 
2444326 US Maine   ENG   POI   12589403 1 sampleuser 
2444327 US Maine   ENG   Town  12587582 1 sampleuser 
2444325 US Maine   ENG   Country  12589315 1 sampleuser 
28744443US Maine   ENG   Town  12590578 1 sampleuser 
2444323 US Maine   ENG   Town  2374968  1 sampleuser 

由於這些ID的所有重複值(1)我想只保留條目的最大Placetype(這裏是國家,其中國家>狀態>鎮> POI)。有沒有簡單的方法來做到這一點,我忽略了或者我必須編寫一個比較所有條目的循環?我寧願不這樣做,因爲總數據庫中有超過300萬個條目,我可能需要多次運行它。

提前致謝!

回答

4

我想你可以通過Placetype列由sort_values使用排序Categorical,然後排序DataFrame然後groupby與聚集first

print (df) 
    WOE_ID ISO Locationname Language Placetype Parent_ID ID Username 
0 2347578 US  Maine  ENG  State 23424977 1 sampleuser 
1 2444322 US  Maine  ENG  Town 12588275 1 sampleuser 
2 2444324 US  Maine  ENG  Town 12588852 1 sampleuser 
3 2444326 US  Maine  ENG  POI 12589403 2 sampleuser 
4 2444327 US  Maine  ENG  Town 12587582 2 sampleuser 
5 2444325 US  Maine  ENG Country 12589315 3 sampleuser 
6 28744443 US  Maine  ENG  Town 12590578 3 sampleuser 
7 2444323 US  Maine  ENG  Town 2374968 3 sampleuser 


df.Placetype = df.Placetype.astype('category', 
            categories=['Country','State','Town','POI'], 
            ordered=True) 

df = df.sort_values('Placetype').groupby('ID', as_index=False).first() 
print (df) 
    ID WOE_ID ISO Locationname Language Placetype Parent_ID Username 
0 1 2347578 US  Maine  ENG  State 23424977 sampleuser 
1 2 2444327 US  Maine  ENG  Town 12587582 sampleuser 
2 3 2444325 US  Maine  ENG Country 12589315 sampleuser 
+0

我相信這正是我需要的,我會在做一些更嚴格的測試一週的過程中,謝謝你! – user3394131

+0

謝謝你的接受!祝你好運! – jezrael

相關問題