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

Pandas按O/A/N分组后按time排序执行shift(-1)结果异常如何解决

问题原因

  • pandas的sort_values()方法默认返回新的DataFrame,不会修改原对象,你的代码中排序操作没有生效,后续分组shift仍然是基于原始顺序的数据执行的,这是结果不符合预期的核心原因。
  • 你遗漏了最后一步将value_next列的NaN值填充为-1的操作。

修正代码

import pandas as pd
  
# 初始化数据
data = [{'time': 10, 'O': 1, 'A': 2, 'N':3, 'value': 10},
        {'time': 7, 'O': 1, 'A': 2, 'N':3, 'value': 11},
       {'time': 15, 'O': 1, 'A': 2, 'N':3, 'value': 12},
       {'time': 11, 'O': 2, 'A': 2, 'N':3, 'value': 20},
        {'time': 12, 'O': 2, 'A': 2, 'N':3, 'value': 21},
       {'time': 1, 'O': 2, 'A': 2, 'N':3, 'value': 25}]
  
# 创建DataFrame
df = pd.DataFrame(data)
  
# 将排序后的结果赋值回df,也可以添加inplace=True参数直接修改原df,更推荐赋值写法避免副作用
df = df.sort_values(by=['O', 'A', 'N', 'time'], ascending=[True, True, True, True])

# 分组偏移后直接填充NaN值为-1
df['value_next'] = df.groupby(['O', 'A', 'N'])['value'].shift(-1).fillna(-1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:15:03