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

如何用Pandas仅移除连续重复行并基于其他列替换值

Pandas处理连续重复行:保留首行并替换为组内最后一行的Departure值

原始数据

import pandas as pd

df = pd.DataFrame(
    [
        ['China', '08/06/2022 20:00', '08/10/2022 20:00'],
        ['China', '8/13/2022 00:54', '8/14/2022 00:54'],
        ['China', '8/14/2022 00:54', '8/14/2022 12:54'],
        ['United Kingdom', '8/27/2022 06:36', '8/31/2022 21:08'],
        ['United Kingdom', '9/01/2022 21:08', '09/02/2022 21:38'],
        ['China', '09/04/2022 21:38', '09/06/2022 21:38']
    ],
    columns=['Country', 'Arrival', 'Departure']
)

需求说明

仅移除连续重复的行(即同一Country连续出现的多行),保留每组连续重复行的第一行,并将其Departure值替换为该组最后一行的Departure值;非连续的重复行(如最后一行的China与前面的China不连续)需保留。

实现代码

# 生成连续分组的ID:标记每个连续相同Country的组
group_ids = df['Country'].ne(df['Country'].shift()).cumsum()

# 按分组聚合,保留首行的Arrival,取最后一行的Departure
result_df = df.groupby(group_ids).agg(
    Country=('Country', 'first'),
    Arrival=('Arrival', 'first'),
    Departure=('Departure', 'last')
).reset_index(drop=True)

# 输出结果
print(result_df)

代码解释

  • df['Country'].ne(df['Country'].shift()):对比当前行与上一行的Country,返回布尔值(不同为True,相同为False),以此区分连续组的边界。
  • .cumsum():将布尔序列转换为累加的组ID,每个连续相同的Country组会被分配同一个ID。
  • groupby(group_ids).agg(...):按组聚合数据,每组保留第一个Country和Arrival,提取最后一个Departure;reset_index(drop=True)用于重置结果的索引,避免保留分组ID。

执行后得到的结果与需求一致:

Country             Arrival           Departure
0          China  08/06/2022 20:00  8/14/2022 12:54
1  United Kingdom  8/27/2022 06:36  09/02/2022 21:38
2          China  09/04/2022 21:38  09/06/2022 21:38

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 00:36:21