如何将索引值分配给多索引数据帧级别?

时间:2019-11-20 20:01:52

标签: pandas

我有一个多索引数据框。但是,我想将其第一级更改为某些索引值列表。假设其第一级最初为[2,4,1],我想将其更改为[1,2,100]。实现它的最简单方法是什么?我当前的方法将涉及reset_index,更改列值并再次设置索引。

3 个答案:

答案 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