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

如何基于上下行值替换DataFrame列中的See Above/See Below值?

高效处理DataFrame中的'See Above'和'See Below'值

先重现你的数据场景:

import pandas as pd
df = pd.DataFrame([[1, 'Cat'], [1, 'See Above'], [4, 'See Below'],[2, 'Dog']], columns=['A','B'])

初始数据:

AB
01Cat
11See Above
24See Below
32Dog

矢量化替换方案(适配230万行大数量级)

因为数据量很大,绝对不能用循环或逐行处理,得用pandas的矢量化操作——底层优化过,速度快很多。

  1. 替换See Above:用上一行的B列值,用shift(1)获取上一行数据,再用mask只替换目标值
  2. 替换See Below:用下一行的B列值,用shift(-1)获取下一行数据,同样用mask替换

代码如下:

# 替换'See Above'为上一行的值
df['B'] = df['B'].mask(df['B'] == 'See Above', df['B'].shift(1))

# 替换'See Below'为下一行的值
df['B'] = df['B'].mask(df['B'] == 'See Below', df['B'].shift(-1))

处理后结果:

AB
01Cat
11Cat
24Dog
32Dog

额外说明

  • 连续重复场景:如果有连续多个See Above(比如['Cat', 'See Above', 'See Above']),shift(1)会自动让后续的See Above取已经替换好的上一行值,结果和预期一致;连续See Below同理。
  • 边界值处理:如果第一行是See Above,shift(1)会得到NaN;最后一行是See Below的话,shift(-1)也会得到NaN,可以根据需求用fillna补默认值:
    df['B'] = df['B'].fillna('Unknown')
    
  • 性能:这种方法处理230万行数据基本几秒就能完成,比循环快几十甚至上百倍。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:25:27