我有一个多索引数据框。但是,我想将其第一级更改为某些索引值列表。假设其第一级最初为[2,4,1]
,我想将其更改为[1,2,100]
。实现它的最简单方法是什么?我当前的方法将涉及reset_index,更改列值并再次设置索引。
答案 0 :(得分:2)
一种方法是创建一个将旧值替换为替换值的字典,然后以元组替换值的方式遍历索引,并将新索引分配回DataFrame:
new_vals = {2: 1, 4: 2, 1: 100}
df.index = pd.MultiIndex.from_tuples([(new_vals[tup[0]], tup[1]) for tup in df.index.to_list()])
(这假设您的MultiIndex只有2个级别,对于要保留的每个其他级别,您都需要在列表理解中添加tup[2]
等。)
答案 1 :(得分:1)
使用df.reindex()
data.reindex([1,2,100])
答案 2 :(得分:1)
使用rename:
设置
import pandas as pd
index = pd.MultiIndex.from_tuples([(e, i) for i, e in enumerate([2, 4, 1])])
df = pd.DataFrame([1, 2, 3], index=index)
print(df)
输出 (设置)
0
2 0 1
4 1 2
1 2 3
代码
new_index = [1, 2, 100]
new_vals = dict(zip(df.index.levels[0], new_index))
print(df.rename(new_vals, level=0))
输出
0
1 0 1
2 1 2
100 2 3