2016-11-29 17 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 

は、(1)私は、エントリを保存しておきたいIDのすべての重複値であり、最大のPlacetype(ここにいる国、国>状態>町> POI)。これを行う簡単な方法は私が見落としているか、すべてのエントリを比較するループを作成する必要がありますか? Idではなく、データベース全体に300万件を超えるエントリーがあるので、私はそれを何度も実行しなければならないだろう。

ありがとうございます!

答えて

4

私はあなたがfirstを集約してsort_valuesによって、その後のソートDataFramePlacetypeによって、Categoricalを命じ、その後groupby使用することができると思う:

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