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的基于排序的算法。
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
添加回答
举报