Pandas基于FY财年条件匹配上一年Value值创建新列问题
解决方案
核心逻辑是给每个财年的行生成组内唯一顺序编号,通过「FY+1+组内编号」映射上一财年同顺位的Value,全向量化操作适配百万行级数据,执行效率极高。
import pandas as pd # 你的原始DataFrame读入后执行以下逻辑 # 1. 按财年分组生成组内行编号,保证同顺位匹配 df['fy_row_idx'] = df.groupby('FY').cumcount() # 2. 构造上一财年Value的映射表 prev_fy_map = df[['FY', 'fy_row_idx', 'Value']].rename(columns={'Value': 'prev_FY'}) prev_fy_map['FY'] = prev_fy_map['FY'] + 1 # 3. 左关联匹配得到结果,删除临时编号列 df = df.merge(prev_fy_map, on=['FY', 'fy_row_idx'], how='left').drop(columns='fy_row_idx')
注意事项
- 若同财年内需要按指定列排序后再匹配顺位,可在生成组内编号前先排序:
df = df.sort_values(['FY', 'A', 'B'], ignore_index=True) - 若财年不连续,需要匹配最近一个存在的财年而非严格
FY-1,可先提取所有唯一财年排序,生成「财年-上一财年」映射表替换prev_fy_map['FY'] = prev_fy_map['FY'] + 1逻辑即可。
内容的提问来源于stack exchange,提问作者rohit D
相关产品推荐
相关产品推荐

