如何在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
相关产品推荐
相关产品推荐

