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

相关问题