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
相关产品推荐
相关产品推荐

