如何更改多索引数据框中的索引

Posted

技术标签:

【中文标题】如何更改多索引数据框中的索引【英文标题】:How change index in multiindex dataframe 【发布时间】:2021-03-08 02:07:12 【问题描述】:

我有一个多索引熊猫数据框,例如:

            col1        col2        col3        col4        col5
ix  iy                                                        
0   14       True          1           1          1           1
    25       True          1           1          1           1
    27       True          1           1          0           1
    28       True          1           1          1           0
    43       True          1           1          1           1
1   12       True          1           1          1           1
    38       True          1           1          1           1
2   0        True          1           1          0           1
    1        True          1           1          1           0

如何通过向它们添加常量值来更改索引?例如ix + 5iy + 10

            col1        col2        col3        col4        col5
ix  iy                                                        
5   24       True          1           1          1           1
    35       True          1           1          1           1
    37       True          1           1          0           1
    38       True          1           1          1           0
    53       True          1           1          1           1
6   22       True          1           1          1           1
    48       True          1           1          1           1
7   10       True          1           1          0           1
    11       True          1           1          1           0 

【问题讨论】:

【参考方案1】:

您可以使用元组和MultiIndex.from_tuples 重新创建新的MultiIndex

L = [(a + 5, b + 10) for a, b in df.index]
df = df.set_index(pd.MultiIndex.from_tuples(L, names=df.index.names))

print (df)
      col1  col2  col3  col4  col5
ix iy                              
5  24  True     1     1     1     1
   35  True     1     1     1     1
   37  True     1     1     0     1
   38  True     1     1     1     0
   53  True     1     1     1     1
6  22  True     1     1     1     1
   48  True     1     1     1     1
7  10  True     1     1     0     1
   11  True     1     1     1     0

MultiIndex.set_levels 的另一个想法:

df.index = df.index.set_levels(df.index.levels[0] + 5, level=0)
df.index = df.index.set_levels(df.index.levels[1] + 10, level=1)
print (df)
       col1  col2  col3  col4  col5
ix iy                              
5  24  True     1     1     1     1
   35  True     1     1     1     1
   37  True     1     1     0     1
   38  True     1     1     1     0
   53  True     1     1     1     1
6  22  True     1     1     1     1
   48  True     1     1     1     1
7  10  True     1     1     0     1
   11  True     1     1     1     0

【讨论】:

以上是关于如何更改多索引数据框中的索引的主要内容,如果未能解决你的问题,请参考以下文章

如何更改熊猫数据框中多索引的外层索引?

在保持二级索引完整的同时对多索引数据框中的行进行排序

将多索引数据帧的索引值提取为python中的简单列表

访问熊猫数据框中内部多索引级别的最后一个元素

如何从python中的数据框中删除多索引?

如何应用于具有多索引列的数据框中的一组列