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

Pandas如何仅对单列唯一值分组后应用条件筛选对应行

实现方法

你之前的写法是全局移位,会出现跨组取值的问题,只需要把移位操作限制在COL1的分组内即可,核心逻辑是对COL1分组后再执行shift操作,确保仅同组内的行做跨行比较。

完整代码示例

import pandas as pd

# 构造示例数据
data = {
    'COL1': ['A','A','B','B','C','C','C','D','D'],
    'VAR1': [0,1,0,1.5,0,2,3,0,2.5],
    'VAR2': [1,2,1,2.5,2,3,4,1,4]
}
df = pd.DataFrame(data)

# 核心逻辑:组内移位比较,同时排除每组最后一行(无下一行可比较)
mask = df.groupby('COL1')['VAR2'].shift(-1) != df['VAR1']
result = df[mask & mask.notna()]

print(result)

代码说明

  • groupby('COL1')['VAR2'].shift(-1) 会仅在COL1的同一分组内,将VAR2列向上偏移1位,也就是取当前行同组下一行的VAR2值,不同分组之间不会互相取值
  • mask.notna() 用于过滤每组最后一行的空值,因为每组最后一行没有下一行,移位后结果为NaN,不需要纳入筛选范围

运行上述代码输出的结果和预期完全一致:

COL1  VAR1  VAR2
2    B   0.0     1
7    D   0.0     1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:06:05