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

如何按session去除instance的连续重复值(保留跨session重复)

解决DataFrame中按Session去除Instance连续重复项的问题

问题描述

需在DataFrame中实现以下规则:

  • 仅去除同一session下instance字段的连续重复项
  • 不同session的相同instance必须保留
  • 同session内非连续的重复instance必须保留

输入数据:

sessioninstance
13
15
15
25
32
32
35
32

期望输出:

sessioninstance
13
15
25
32
35
32

原代码df = df.loc[df['instance'].shift(-1) != df['instance']]的问题:未按session分组,直接全局比较instance移位值,会误删跨session的连续相同instance(比如session1的最后一个5和session2的5会被错误过滤)。

修正后的代码

通过groupby按session分组,仅在组内比较instance的连续值:

# 生成过滤掩码:同一session内,当前行instance与上一行不同,或为组内第一行
mask = df.groupby('session')['instance'].shift().ne(df['instance']) | df.groupby('session')['instance'].shift().isna()
# 应用掩码得到结果
df_result = df[mask]

也可以写成更简洁的单行形式:

df_result = df[df.groupby('session')['instance'].shift().ne(df['instance']) | df.groupby('session')['instance'].shift().isna()]

代码说明

  1. df.groupby('session')['instance'].shift():按session分组后,获取每个组内上一行的instance值,组内第一行的移位结果为NaN
  2. .ne(df['instance']):判断当前行instance与组内上一行是否不同
  3. | df.groupby('session')['instance'].shift().isna():保留每个组的第一行(移位后为NaN,isna()返回True)
  4. 最终掩码会保留:每个组的第一行,以及组内与上一行instance不同的行,完全符合需求。

验证结果

运行代码后,输入数据会被处理为期望的输出格式:

  • session1中连续的5被去除一个
  • session2的5与session1的5分属不同组,被保留
  • session3中2→5→2的非连续重复值全部保留

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 07:47:04