Python(pandas):分组查找当前行对应历史变更值的实现咨询
按分组获取上一次变更的Value值实现方案
样本输入数据
Group Value 01 10 01 10 01 10 02 5 02 5 02 15 03 20 03 25 03 15 03 15
期望输出
Group Value Previous_Value 01 10 01 10 01 10 02 5 02 5 02 15 5 03 20 03 25 20 03 15 25 03 15
实现代码与步骤
以下是基于pandas和numpy的实现方案:
import pandas as pd import numpy as np # 构造样本数据(实际使用时可替换为你的数据集) data = { 'Group': ['01', '01', '01', '02', '02', '02', '03', '03', '03', '03'], 'Value': [10, 10, 10, 5, 5, 15, 20, 25, 15, 15] } df = pd.DataFrame(data) # 1. 计算每个分组内当前行的上一行Value df['Previous_Value'] = df.groupby('Group')['Value'].shift(1) # 2. 仅保留Value发生变更行的上一个值,重复行清空 df['Previous_Value'] = np.where( df['Value'] == df.groupby('Group')['Value'].shift(1), '', df['Previous_Value'] ) # 3. 将分组首行的空值(NaN)替换为空白字符串 df['Previous_Value'] = df['Previous_Value'].fillna('') # 输出结果 print(df)
代码说明
- 分组偏移:
groupby('Group')['Value'].shift(1)针对每个分组,将Value列向下偏移一行,得到当前行的上一行Value,分组第一行会生成NaN。 - 过滤重复值:通过
np.where判断当前行Value是否与上一行相同,相同则清空Previous_Value,仅保留Value发生变化时的上一个值。 - 统一格式:用
fillna('')将分组首行的NaN替换为空白字符串,与期望输出格式一致。
内容的提问来源于stack exchange,提问作者Coding_Nubie
相关产品推荐
相关产品推荐

