按组判断数值是否大于前一行的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与期望完全一致:
| Ref1 | Val1 | AbvBlw |
|---|---|---|
| A | 1 | |
| A | 2 | Abv |
| A | 3 | Abv |
| A | 4 | Abv |
| B | 1 | |
| B | 1 | |
| B | 2 | Abv |
| B | 0 | Blw |
代码说明
groupby('Ref1')['Val1'].shift(1):按Ref1分组后,将每组的Val1向下偏移一行,实现同组内当前行获取前一行的数值,组的第一行因无前置行,结果为NaNnp.select():批量处理多条件判断,依次匹配条件并返回对应结果,未匹配的情况(数值相等或第一行)返回空字符串- 最后移除辅助列
prev_Val1,得到最终结果
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

