基于列条件修改Pandas索引值(不使用reset_index)
基于指定列条件修改Pandas DataFrame索引(不使用reset_index)
如果你需要根据某列的条件修改DataFrame的索引值,同时不想用reset_index()方法,可以用以下两种简洁的方式实现:
场景示例
初始DataFrame如下:
import pandas as pd data = { "Product": ["Computer", "Printer", "Monitor"], "Price": [120, 25, 40], } df = pd.DataFrame(data, index=["Item_1", "Item_1", "Item_1"])
输出:
Product Price Item_1 Computer 120 Item_1 Printer 25 Item_1 Monitor 40
目标是将Product列值为Monitor的行索引从Item_1改为TOTO。
方法1:复制索引后针对性修改
由于Pandas的Index对象默认不可变,我们可以先复制一份索引,定位到需要修改的行后赋值,再替换原索引:
# 复制原索引 idx = df.index.copy() # 筛选条件行并修改索引值 idx[df['Product'] == 'Monitor'] = 'TOTO' # 重新赋值索引 df.index = idx
方法2:使用Index.where()一步到位
where()方法可以批量处理索引替换,保留满足条件的原索引,不满足的替换为指定值:
df.index = df.index.where(df['Product'] != 'Monitor', 'TOTO')
修改后结果
执行任意一种方法后,DataFrame变为:
Product Price Item_1 Computer 120 Item_1 Printer 25 TOTO Monitor 40
内容的提问来源于stack exchange,提问作者olivier dadoun
相关产品推荐
相关产品推荐

