首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python -基于两列组合删除数据框中的重复项?

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

Stack Overflow用户
提问于 2018-07-05 09:10:40
回答 2查看 6.5K关注 0票数 20

我有一个Python中包含3列的dataframe:

代码语言:javascript
复制
Name1 Name2 Value
Juan  Ale   1
Ale   Juan  1

并且希望消除基于列Name1和Name2组合的重复项。

在我的示例中,两行相等(但它们的顺序不同),我想删除第二行,只保留第一行,因此最终结果应该是:

代码语言:javascript
复制
Name1 Name2 Value
Juan  Ale   1

任何想法都会非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-05 09:16:07

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

代码语言:javascript
复制
res = df[~df[['Name1', 'Name2']].apply(frozenset, axis=1).duplicated()]

print(res)

  Name1 Name2  Value
0  Juan   Ale      1

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

与行相比,列的伸缩性更好。对于大量的行,使用@Wen的基于排序的算法。

票数 22
EN

Stack Overflow用户

发布于 2018-07-05 09:49:23

通过在duplicated中使用np.sort

代码语言:javascript
复制
df[pd.DataFrame(np.sort(df[['Name1','Name2']].values,1)).duplicated()]
Out[614]: 
  Name1 Name2  Value
1   Ale  Juan      1

性能

代码语言:javascript
复制
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
票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51182228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档