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

如何在Pandas中移除与前一行value值相同的连续重复行?

问题描述

我有如下Pandas DataFrame:

datevalue
2023-010
2023-020
2023-03-1
2023-04-1
2023-050
2023-060
2023-07-1
2023-08-1

需要移除与前一行value值相同的行,仅保留每组连续相同value的第一行,转换后结果如下:

datevalue
2023-010
2023-03-1
2023-050
2023-07-1
解决方案

可以通过Pandas的shift()或diff()方法实现需求,核心思路是对比当前行与前一行的value值,筛选出值发生变化的行(包含第一行)。

方法一:使用shift()

import pandas as pd

# 构造原始DataFrame
df = pd.DataFrame({
    'date': ['2023-01', '2023-02', '2023-03', '2023-04', 
             '2023-05', '2023-06', '2023-07', '2023-08'],
    'value': [0, 0, -1, -1, 0, 0, -1, -1]
})

# 筛选连续不同value的行
filtered_df = df[df['value'] != df['value'].shift()]

print(filtered_df)

解释:

  • df['value'].shift()将value列向下偏移一行,第一行变为NaN
  • 对比df['value'] != df['value'].shift()时,第一行因NaN与任何值比较结果为True会被保留;后续仅当当前行value与前一行不同时,该行才会被保留

方法二:使用diff()

filtered_df = df[df['value'].diff().fillna(1) != 0]

解释:

  • diff()计算当前行与前一行的value差值,第一行差值为NaN
  • 用fillna(1)将第一行的NaN替换为1,只要差值不为0,就说明value发生了变化,对应行被保留

内容的提问来源于stack exchange,提问作者p.magalhaes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 07:30:07