Pandas如何为过滤后的DataFrame新增基于移位索引的新列
pandas 新增基于移位索引值列的实现方案
你的需求本质是将DataFrame的索引值向上偏移1位,让当前行取到下一行的索引值,最后一行无后续索引时填充空值,直接用pandas原生的移位方法即可实现,无需自定义循环。
具体实现步骤
- 首先复现你的样例测试数据
import pandas as pd # 构造匹配描述的样例DataFrame df = pd.DataFrame( data={"Point": [12, 1, 12]}, index=[124, 559, 717] )
- 核心实现代码
注意不能直接对Index对象做移位,需要先将索引转为和DataFrame行对齐的Series,再调用shift(-1)实现向上偏移1位(参数为-1代表把后一行的值挪到当前行,默认参数1是把前一行的值挪到当前行):
df["Pre_Index"] = df.index.to_series().shift(-1)
- 运行结果验证
执行上述代码后打印DataFrame,输出完全匹配你的预期:
Point Pre_Index 124 12 559.0 559 1 717.0 717 12 NaN
补充优化
因为NaN值默认会把整数列转为浮点类型,如果你需要Pre_Index列保留整数格式,可以用pandas支持空值的Int64类型做转换:
df["Pre_Index"] = df.index.to_series().shift(-1).astype("Int64")
转换后输出效果如下,不会出现小数位:
Point Pre_Index 124 12 559 559 1 717 717 12 <NA>
内容的提问来源于stack exchange,提问作者Winston
相关产品推荐
相关产品推荐

