Pandas删除不同列中的重复数据对

3
以下是我的数据表,来自我的代码输出:
| columnA|ColumnB|ColumnC|
| ------ | ----- | ------|
|   12   | 8     | 1.34  |
|   8    | 12    | 1.34  |
|   1    | 7     | 0.25  |

我想要去重并只保留一个

| columnA|ColumnB|ColumnC|
| ------ | ----- | ------|
|   12   | 8     | 1.34  |
|   1    | 7     | 0.25  |

通常,当我尝试去除重复项时,我会使用.drop_duplicates(subset=)方法。但是这次,我想要删除相同的一对,例如:我想要删除 (columnA,columnB)==(columnB,columnA)。我做了一些调查,我发现有人使用set((a,b) if a<=b else (b,a) for a,b in pairs)来删除相同的列表对。但我不知道如何在pandas数据框上使用此方法。请帮忙解决,提前致谢!
3个回答

4

将相关列转换为 frozenset

out = df[~df[['columnA', 'ColumnB']].apply(frozenset, axis=1).duplicated()]
print(out)

# Output
   columnA  ColumnB  ColumnC
0       12        8     1.34
2        1        7     0.25

细节:

>>> set([8, 12])
{8, 12}

>>> set([12, 8])
{8, 12}

1
忘记和frozenset。好答案,已点赞! - Code Different

2
您可以将ab组合成一个元组,然后基于组合列调用drop_duplicates函数:
t = df[["a", "b"]].apply(lambda row: tuple(set(row)), axis=1)
df.assign(t=t).drop_duplicates("t").drop(columns="t")

1
可能的解决方案如下:
# pip install pandas

import pandas as pd

# create test dataframe
df = pd.DataFrame({"colA": [12,8,1],"colB": [8,12,1],"colC": [1.34,1.34,0.25]})
df

enter image description here

df.loc[df.colA > df.colB, df.columns] = df.loc[df.colA > df.colB, df.columns[[1,0,2]]].values
df.drop_duplicates()

返回

这里输入图片描述


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