为了账号安全,请及时绑定邮箱和手机立即绑定

Python-基于两列组合删除数据框中的重复项?

Python-基于两列组合删除数据框中的重复项?

动漫人物 2020-02-01 16:27:49
我在Python中有一个包含3列的数据框:Name1 Name2 ValueJuan  Ale   1Ale   Juan  1并希望消除基于Name1和Name2列组合的重复项。在我的示例中,两行相等(但是顺序不同),我想删除第二行并保留第一行,因此最终结果应为:Name1 Name2 ValueJuan  Ale   1任何想法将不胜感激!
查看完整描述

3 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

您可以转换为frozenset并使用pd.DataFrame.duplicated。


res = df[~df[['Name1', 'Name2']].apply(frozenset, axis=1).duplicated()]


print(res)


  Name1 Name2  Value

0  Juan   Ale      1

frozenset是必需的,而不是set因为duplicated使用哈希检查重复项。


列的缩放比行的缩放更好。对于大量行,请使用@Wen的基于排序的算法。


查看完整回答
反对 回复 2020-02-01
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

通过np.sort与duplicated


df[pd.DataFrame(np.sort(df[['Name1','Name2']].values,1)).duplicated()]

Out[614]: 

  Name1 Name2  Value

1   Ale  Juan      1

性能


df=pd.concat([df]*100000)


%timeit df[pd.DataFrame(np.sort(df[['Name1','Name2']].values,1)).duplicated()]

10 loops, best of 3: 69.3 ms per loop

%timeit df[~df[['Name1', 'Name2']].apply(frozenset, axis=1).duplicated()]

1 loop, best of 3: 3.72 s per loop


查看完整回答
反对 回复 2020-02-01
  • 3 回答
  • 0 关注
  • 1113 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信