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

如何在pandas DataFrame查询操作中结合.shift()获取指定行的偏移值

你写法的问题在于执行顺序错误:先筛选出仅匹配Primary Key的单行数据,再对只有1行的子集做shift(1)操作,自然会返回空值。需要调整执行顺序,先对整个tmp做偏移或者先定位目标行的位置再取值,以下是两种可行实现:

方案1:先定位目标行位置再取偏移行

适合仅需要单条目标行的偏移结果的场景,性能开销更小:

# 1. 定位目标行在tmp中的整数索引位置
target_pos = tmp.index.get_indexer(tmp[tmp['Primary Key'] == key].index)[0]
# 2. 边界判断后取前一行,避免第一行无前置行的越界问题
if target_pos > 0:
    res = tmp.iloc[target_pos - 1]
else:
    res = None # 可根据需求替换为自定义默认返回值

方案2:先全局偏移再筛选目标行

适合需要批量处理多行偏移,或者需要直接拿到和原行对齐的偏移结果的场景,写法更简洁:

# 先对tmp全表做偏移,再筛选对应目标行的偏移结果
res = tmp.shift(1).loc[tmp['Primary Key'] == key]

如果只需要取指定列的偏移值,也可以直接对单列做偏移后取值:

# 例如需要取score列的上一行值
tmp['prev_score'] = tmp['score'].shift(1)
res_score = tmp.loc[tmp['Primary Key'] == key, 'prev_score'].iloc[0]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:15:03