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

如何在Pandas DataFrame中选择重复行之间的记录

解决方法

要选中同一司机同一出发地重复行之间的记录,我们可以通过标记重复项的出现位置,再提取对应区间内的行来实现,具体步骤如下:

1. 构建DataFrame

首先加载数据并创建Pandas DataFrame:

import pandas as pd

data = {'driver': ['Tom', 'Tom', 'Tom', 'Nick', 'Nick', 'Nick', 'Nick', 
                   'Krish', 'Krish', 'Krish', 'Krish', 'Jack', 'Jack', 'Jack'], 
        'from': ['Manhattan', 'Brooklyn', 'Queens', 'Manhattan', 'Brooklyn', 'Manhattan', 'Queens',
                 'Queens', 'Brooklyn', 'Manhattan', 'Queens', 'Queens', 'Brooklyn', 'Manhattan'],
        'distance': [35, 40, 25, 35, 35, 75, 25, 
                    40, 35, 75, 25, 25, 40, 35]} 

df = pd.DataFrame(data)

2. 标记重复项的出现次数

对每个driver+from组合,用cumcount()标记每行是该组合的第几次出现:

df['occurrence'] = df.groupby(['driver', 'from']).cumcount() + 1

3. 获取重复项的索引区间

提取每个组合第一次和第二次出现的索引,确定需要保留的行区间:

# 提取第一次出现的索引
first_occur = df[df['occurrence'] == 1].reset_index().rename(columns={'index': 'first_idx'})
# 提取第二次出现的索引
second_occur = df[df['occurrence'] == 2].reset_index().rename(columns={'index': 'second_idx'})

# 合并得到每个重复组合的索引区间
interval_df = pd.merge(
    first_occur[['driver', 'from', 'first_idx']],
    second_occur[['driver', 'from', 'second_idx']],
    on=['driver', 'from']
)

4. 提取目标区间内的行

遍历每个索引区间,筛选出区间内的行并合并结果:

result_list = []
for _, row in interval_df.iterrows():
    # 保留从第一次出现到第二次出现前的所有行(左闭右开)
    subset = df.loc[row['first_idx'] : row['second_idx'] - 1]
    result_list.append(subset)

# 合并所有结果并去重(避免行被多个区间重复选中)
result = pd.concat(result_list).drop_duplicates().drop(columns='occurrence')

最终得到的result就是你需要的结果:

indexdriverfromdistance
3NickManhattan35
4NickBrooklyn35
7KrishQueens40
8KrishBrooklyn35
9KrishManhattan75

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:27:10