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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 16:38:32