首页 > 解决方案 > 如果您不关心列名,有没有办法摆脱错误排序的“重复”?

问题描述

假设我有下表。

Α B1 B2
1 奶牛
1 奶牛
2
2 母鸡
2 母鸡
2
3 奶牛
3 奶牛

我想说B1和B2在功能上是可以互换的,顺序无所谓。也就是说,前两行是等价的,因为它包含我的 B 列的 'Dog' 和 'Cow' 。结果,我想删除其中一个以消除重复项,基本上如下表所示。

Α B1 B2
1 奶牛
2
2 母鸡
3 奶牛

我在这里有点难过,因为我想我会从一个 For 循环开始,但我不确定如何最好地让不同的行相互“交谈”。提前致谢。

标签: pythonsql

解决方案


以下是使用pandas实现此目的的方法(您可以根据您的平台/技术自定义此策略):

首先,基于B1和创建一个排序和连接的列B2。由于我们首先排序,因此 Cow、Dog 和 Dog, Cow 现在将变为Cow-Dog

df['concat'] = ['-'.join(sorted(tup)) for tup in zip(df['B1'], df['B2'])]
    
#dropping B1 and B2 because they will mess up the level of data
df_new = df.drop(['B1','B2'], 1)

现在,我们最终会得到重复的行。因此丢弃它们:

pre = df_new.drop_duplicates(subset=['Alpha', 'concat'], keep="first")

任务完成!现在将连接列扩展回原始形状(B1 和 B2)并删除连接列:

pre[['B1','B2']] = pre.concat.str.split("-",expand=True,)
final = pre.drop(['concat'], 1)

Final数据框将包含您想要的输出!


推荐阅读