You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于两列等价组合筛选唯一行?

原始数据表

city1city2dist
New YorkBerlin7900
BerlinNew York7900
OregonOhio5700
MontrealRio5700
OhioOregon5700
RioMontreal5700
MoscowTokyo4200
TokyoMoscow4200

解决方案

针对这种城市对互换的重复行,核心思路是统一每对城市的排序规则,让原本互换的行变成完全一致的记录,再进行去重操作。以下是几种常用工具的实现方法:

1. SQL 实现

利用数据库内置函数将两个城市按固定顺序(比如字母序)排列后去重:

-- MySQL/PostgreSQL 版本
SELECT DISTINCT
  LEAST(city1, city2) AS city_a,
  GREATEST(city1, city2) AS city_b,
  dist
FROM your_table;

如果是 SQL Server,用 IIF 函数实现排序逻辑:

SELECT DISTINCT
  IIF(city1 < city2, city1, city2) AS city_a,
  IIF(city1 > city2, city1, city2) AS city_b,
  dist
FROM your_table;

2. Python Pandas 实现

通过对每行的城市列排序,生成统一格式的城市对后去重:

import pandas as pd
import numpy as np

# 假设数据已加载到 DataFrame 中
df = pd.DataFrame({
    'city1': ['New York', 'Berlin', 'Oregon', 'Montreal', 'Ohio', 'Rio', 'Moscow', 'Tokyo'],
    'city2': ['Berlin', 'New York', 'Ohio', 'Rio', 'Oregon', 'Montreal', 'Tokyo', 'Moscow'],
    'dist': [7900, 7900, 5700, 5700, 5700, 5700, 4200, 4200]
})

# 对每行的 city1 和 city2 按字母排序,生成新列
df[['city_a', 'city_b']] = pd.DataFrame(np.sort(df[['city1', 'city2']], axis=1), index=df.index)

# 基于统一后的城市对和距离去重,删除原列
unique_df = df.drop_duplicates(subset=['city_a', 'city_b', 'dist']).drop(columns=['city1', 'city2'])

print(unique_df)

3. Excel 实现

通过辅助列统一城市顺序后删除重复值:

  • 添加两个辅助列(比如 D、E 列)
  • D 列输入公式:=IF(A2<B2,A2,B2),下拉填充所有行
  • E 列输入公式:=IF(A2>B2,A2,B2),下拉填充所有行
  • 选中 D、E、C(dist)列,点击「数据」→「删除重复值」,仅勾选这三列,确认后即可得到去重结果。

内容的提问来源于stack exchange,提问作者Mojtaba Asgari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 05:40:18