如何使用 SQL 或 Python 在下面提到的标准中查找表中的唯一记录(在所有列中)?
Posted
技术标签:
【中文标题】如何使用 SQL 或 Python 在下面提到的标准中查找表中的唯一记录(在所有列中)?【英文标题】:How to find Unique records (in all columns) in a table as mentioned below criteria with SQL or Python? 【发布时间】:2021-06-12 16:36:41 【问题描述】:假设一个 Table1 有两列:col1 和 col2
col1 | col2 |
---|---|
A | B |
B | A |
C | D |
E | F |
F | E |
我们如何才能找到最终输出(我们必须找到唯一的记录):
col1 | col2 |
---|---|
A | B |
C | D |
E | F |
**** 或 ****
col1 | col2 |
---|---|
B | A |
C | D |
F | E |
【问题讨论】:
【参考方案1】:你可以使用not exists
:
select col1, col2
from t
where col1 < col2 or
not exists (select 1
from t t2
where t2.col1 = t.col2 and t2.col2 = t.col1
);
即选择col1 < col2
所在的所有行。或者,选择不存在此类行的所有行。
【讨论】:
@DeepanshiSet 请检查A Tour。如果您认为这个答案足够好,它可以帮助您解决问题,您可以接受它和/或选择将其投票为最相关和最有帮助的。这有助于未来的读者至少找到解决类似问题的方法,并向其他人展示这个问题有帮助的答案,无需深入研究 cmets【参考方案2】:这个 sn-p 无法找到所有可能的“唯一”集合,但它至少可以找到一个。希望它可以解决您当前的问题。
table = [['A', 'B'],
['B', 'A'],
['C', 'D'],
['E', 'F'],
['F', 'E']]
unique_set = set()
for row in table:
tmp = frozenset(row)
if tmp not in unique_set:
unique_set.add(tmp)
print(unique_set)
【讨论】:
【参考方案3】:我喜欢 pythonic 解决方案,这是我的方式:
df
col1 col2
0 A B
1 B A
2 C D
3 E F
4 F E
创建新列
df['test'] = [sorted(x) for x in list(zip(df['col1'],df['col2']))]
输出:
col1 col2 test
0 A B [A, B]
1 B A [A, B]
2 C D [C, D]
3 E F [E, F]
4 F E [E, F]
删除重复并获取索引:
idx = df['test'].astype(str).drop_duplicates().index
新数据框:
del df['test']
df.loc[idx]
.
col1 col2
0 A B
2 C D
3 E F
【讨论】:
以上是关于如何使用 SQL 或 Python 在下面提到的标准中查找表中的唯一记录(在所有列中)?的主要内容,如果未能解决你的问题,请参考以下文章