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

