如何将Pandas DataFrame的索引值重置为从0开始
Pandas滚动计算后将索引重置为从0起始的方案
问题对应代码
rolling_window = 120 df = df.rolling(rolling_window, min_periods=1).agg(['mean','std']) df.columns = df.columns.map('_'.join) # df = df.reset_index() df = df.iloc[(rolling_window-1):,] df = df.rename_axis('timestamps').reset_index() df = df.set_index('timestamps')
运行上述代码后最终输出的DataFrame行索引从119开始,需要调整为从0开始连续编号。
问题原因
iloc 做行切片时不会自动重置行索引标签,会保留切片前每行对应的原始索引值。上述代码从原数据第119个位置开始切片,切片后的行索引初始值为119并逐行递增;后续流程将该索引重命名为timestamps后又重新设为行索引,最终索引就保留了从119起始的编号。
修复方法
在iloc切片操作后追加reset_index(drop=True),丢弃原有旧索引标签,自动生成从0开始的连续整数索引即可。修改后完整代码如下:
rolling_window = 120 df = df.rolling(rolling_window, min_periods=1).agg(['mean','std']) df.columns = df.columns.map('_'.join) # 切片后立即重置索引,丢弃原有的行号标签 df = df.iloc[(rolling_window-1):,].reset_index(drop=True) df = df.rename_axis('timestamps').reset_index() df = df.set_index('timestamps')
如果已经跑完原代码得到了最终结果对象,也可以直接对结果执行如下命令重置索引:
df = df.reset_index(drop=True)
注意:该操作会直接丢弃当前作为索引的
timestamps列值,新索引为从0开始的连续整数,如果需要保留原timestamps的数值,请使用前面修改流程的方案。
内容的提问来源于stack exchange,提问作者Sushil Kokil
相关产品推荐
相关产品推荐

