Pandas去重复项;倒序排列的值

3

我正试图找到一种利用pandas的drop_duplicates()方法来识别行数据在值反转时的重复项。

例如,如果我想要找到客户同时购买苹果和香蕉的交易记录,但数据收集顺序可能已经颠倒了这些项目。换句话说,当合并为一个完整订单时,该交易被视为重复项,因为它由相同的商品组成。

我希望以下内容被识别为重复项:

Item1   Item2
Apple   Banana
Banana  Apple
1个回答

5

首先使用 apply 函数对行进行排序,然后使用 drop_duplicates 函数去除重复行:

df = df.apply(sorted, axis=1).drop_duplicates()
print (df)
   Item1   Item2
0  Apple  Banana

#if need specify columns
cols = ['Item1','Item2']
df[cols] = df[cols].apply(sorted, axis=1)
df = df.drop_duplicates(subset=cols)
print (df)
   Item1   Item2
0  Apple  Banana

使用numpy.sortDataFrame构造函数的另一种解决方案:

df = pd.DataFrame(np.sort(df.values, axis=1), index=df.index, columns=df.columns)
       .drop_duplicates()
print (df)
   Item1   Item2
0  Apple  Banana

感谢您的快速回复。这让我很疯狂,因为我认为它很简单。我最喜欢第三个选项。非常感谢! - Carrie
是的,它是最快的,因为使用了 numpy。很高兴能帮到你! - jezrael
最后一个选项非常好! - MaxU - stand with Ukraine
@MaxU - 谢谢。 - jezrael
1
只有在将 apply 函数的 result_type 参数设置为 'expand' 之后,选项 2 才对我起作用。 - Tharaka Devinda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接