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

按组判断数值是否大于前一行的DataFrame处理需求

pandas实现分组内相邻行数值对比并新增标记列

示例数据构造

先创建题目中的示例DataFrame:

import pandas as pd

data = {
    'Ref1': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
    'Val1': [1, 2, 3, 4, 1, 1, 2, 0]
}
df = pd.DataFrame(data)

核心实现代码

通过分组移位对比+条件判断完成需求:

import numpy as np

# 分组后获取同组内前一行的Val1值
df['prev_Val1'] = df.groupby('Ref1')['Val1'].shift(1)

# 定义判断条件与对应结果
conditions = [
    df['Val1'] > df['prev_Val1'],
    df['Val1'] < df['prev_Val1']
]
choices = ['Abv', 'Blw']

# 生成AbvBlw列,默认填充空字符串
df['AbvBlw'] = np.select(conditions, choices, default='')

# 移除辅助列(可选操作)
df = df.drop('prev_Val1', axis=1)

输出结果

运行后得到的DataFrame与期望完全一致:

Ref1Val1AbvBlw
A1
A2Abv
A3Abv
A4Abv
B1
B1
B2Abv
B0Blw

代码说明

  • groupby('Ref1')['Val1'].shift(1):按Ref1分组后,将每组的Val1向下偏移一行,实现同组内当前行获取前一行的数值,组的第一行因无前置行,结果为NaN
  • np.select():批量处理多条件判断,依次匹配条件并返回对应结果,未匹配的情况(数值相等或第一行)返回空字符串
  • 最后移除辅助列prev_Val1,得到最终结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 01:08:27