Pandas删除多层索引行后如何重置高层级索引为连续序列?
解决方案
- 推荐最高效的实现方式是直接操作MultiIndex的数组生成新索引,无需重建整个DataFrame,仅修改索引映射关系,性能开销极低,适合频繁执行删除操作的场景:
import pandas as pd # 每次删除完成后执行以下代码即可重置第一层molecule_id为连续序列 new_molecule_ids = pd.factorize(data.index.get_level_values('molecule_id'))[0] data.index = pd.MultiIndex.from_arrays( [new_molecule_ids, data.index.get_level_values('atom_id')], names=['molecule_id', 'atom_id'] )
- 你也可以把逻辑封装为复用函数,简化调用流程:
def reset_continuous_mol_index(df: pd.DataFrame) -> None: new_mol_ids = pd.factorize(df.index.get_level_values('molecule_id'))[0] df.index = pd.MultiIndex.from_arrays( [new_mol_ids, df.index.get_level_values('atom_id')], names=df.index.names ) # 调用示例 data.drop(labels=1, level='molecule_id', axis=0, inplace=True) reset_continuous_mol_index(data)
说明:Pandas的MultiIndex的levels设计为FrozenList不可直接修改,本质是为了避免索引和数据映射混乱,以上方案是官方推荐的合法修改方式,不需要操作DataFrame的业务数据列,执行效率远高于重建整个表后重新设置索引的方案。另外你原代码中设置索引时的
molceule_id存在拼写错误,建议修正为molecule_id避免后续索引操作报错。
内容的提问来源于stack exchange,提问作者idav
相关产品推荐
相关产品推荐

