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

按ID分组标记DataFrame中与下一行值连续重复的行

问题

给定如下DataFrame:

import pandas as pd
df = pd.DataFrame(
    {'id': [1,1,1,2,2,2,3,3,3],
     'value': ['pot','pot','jebus','pot','jebus','pot','pot','jebus','jebus']}
)

需要按id分组,标记出每组内当前行与下一行值完全相同的所有行(连续的两行都要标记为True),同时满足:

  • 仅在同一id分组内判断,跨id的首尾行即使值相同也不标记;
  • 非连续的重复值不标记,比如'pot','jebus','pot'这种序列不需要标记。

期望的标记结果(对应每行):[True, True, False, False, False, False, True, True, True]

解决方法

利用pandas的分组、移位(shift)和布尔运算即可实现,代码如下:

# 1. 分组判断当前行与下一行的value是否相同
same_next = df.groupby('id')['value'].apply(lambda g: g == g.shift(-1))
# 2. 将当前行的标记与下一行的标记合并(逻辑或),确保连续两行都被标记
df['mark'] = same_next | same_next.shift(fill_value=False)
验证结果

执行代码后,原DataFrame会新增mark列:

id   value   mark
0   1     pot   True
1   1     pot   True
2   1   jebus  False
3   2     pot  False
4   2   jebus  False
5   2     pot  False
6   3     pot   True
7   3   jebus   True
8   3   jebus   True

可以看到:

  • id=1的前两行pot连续相同,均标记为True;
  • id=3的后两行jebus连续相同,均标记为True;
  • 其他非连续或跨id的行都正确标记为False,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:02:04