如何从Pandas DataFrame中获取基于指定列的所有重复记录集合?
如何找出DataFrame中重复flight_id对应的索引元组?
先看一下我们要处理的航班数据:
| flight_id | from_location | to_location | schedule |
|---|---|---|---|
| 1 | Vancouver | Toronto | 3-Jan |
| 2 | Amsterdam | Tokyo | 15-Feb |
| 4 | Fairbanks | Glasgow | 12-Jan |
| 9 | Halmstad | Athens | 21-Jan |
| 3 | Brisbane | Lisbon | 4-Feb |
| 4 | Johannesburg | Venice | 23-Jan |
| 9 | LosAngeles | Perth | 3-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
相关产品推荐
相关产品推荐

