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

如何从Pandas DataFrame中获取基于指定列的所有重复记录集合?

如何找出DataFrame中重复flight_id对应的索引元组?

先看一下我们要处理的航班数据:

flight_idfrom_locationto_locationschedule
1VancouverToronto3-Jan
2AmsterdamTokyo15-Feb
4FairbanksGlasgow12-Jan
9HalmstadAthens21-Jan
3BrisbaneLisbon4-Feb
4JohannesburgVenice23-Jan
9LosAngelesPerth3-Mar

需求很明确:基于flight_id列找出重复的记录,把每组重复项的索引打包成元组,最终得到[(2,5),(3,6)]这样的结果。

这里用Pandas可以轻松实现,给你两种写法:

分步实现(清晰易懂)

先把数据加载成DataFrame,然后一步步处理:

import pandas as pd

# 构造示例数据
data = {
    'flight_id': [1,2,4,9,3,4,9],
    'from_location': ['Vancouver','Amsterdam','Fairbanks','Halmstad','Brisbane','Johannesburg','LosAngeles'],
    'to_location': ['Toronto','Tokyo','Glasgow','Athens','Lisbon','Venice','Perth'],
    'schedule': ['3-Jan','15-Feb','12-Jan','21-Jan','4-Feb','23-Jan','3-Mar']
}
df = pd.DataFrame(data)

# 第一步:找出所有存在重复的flight_id
duplicate_flight_ids = df[df.duplicated('flight_id', keep=False)]['flight_id'].unique()

# 第二步:遍历每个重复ID,收集对应的索引并转成元组
result = []
for fid in duplicate_flight_ids:
    # 获取当前ID对应的所有行索引
    idx_list = df[df['flight_id'] == fid].index.tolist()
    result.append(tuple(idx_list))

print(result)  # 输出:[(2, 5), (3, 6)]

简洁写法(一行搞定)

如果喜欢更紧凑的代码,用列表推导式就能一步得到结果:

import pandas as pd

# 同样先构造DataFrame(省略重复代码)
df = pd.DataFrame(data)

result = [tuple(df[df['flight_id'] == fid].index) for fid in df[df.duplicated('flight_id', keep=False)]['flight_id'].unique()]
print(result)  # 同样输出:[(2, 5), (3, 6)]

关键知识点解释

  • df.duplicated('flight_id', keep=False):这个方法会标记所有重复的行(keep=False表示不保留第一个或最后一个,所有重复行都标记为True),这样我们就能筛选出所有涉及重复的记录。
  • 提取unique()的flight_id:避免重复处理同一个ID。
  • 用df.index获取行索引:Pandas默认的索引是从0开始的,刚好和需求里的索引对应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:58:41