Изменить индекс внутри многоуровневой иерархии Pandas Dataframe - PullRequest
1 голос
/ 19 сентября 2019

У меня есть DataFrame, который является многоуровневым и имеет 2 уровня с именем Outer Groups, Inner Numbers.Я хочу изменить индекс на Inner Numbers.

outside='g1 g1 g1 g2 g2 g2'.split()
inside='1 2 3 1 2 3'.split()
hier_index=list(zip(outside,inside))
hier_index= pd.MultiIndex.from_tuples(hier_index)
df=pd.DataFrame(np.random.randn(6,3), hier_index, ['a','b','c'])

df.index.names = ['Outer Group', 'Inner Numbers']

Итак, мой DataFrame имеет внешний g1, g2 и внутренний 1,2,3 1,2,3.Я хочу изменить их названия, поскольку я пытаюсь учиться.Я не хочу никаких ярлыков, что я хочу узнать, как

  1. изменить g1,g2 в X,Y
  2. Изменить g1(123) -> X(a,b,c)
  3. Изменить метку столбцов, например Outer Groups -> Level 1 и Inner Numbers -> Level 2

1 Ответ

2 голосов
/ 19 сентября 2019

Вы можете использовать rename со словарем и указывать уровни, для изменения имен индексов можно использовать DataFrame.rename_axis:

df = df.rename({'g1':'X','g2':'Y'}, level=0)
df = df.rename({'1':'a','2':'b', '3':'c'}, level=1)
df = df.rename_axis(['Level 1','Level 2'])
print (df)
                        a         b         c
Level 1 Level 2                              
X       a       -1.085631  0.997345  0.282978
        b       -1.506295 -0.578600  1.651437
        c       -2.426679 -0.428913  1.265936
Y       a       -0.866740 -0.678886 -0.094709
        b        1.491390 -0.638902 -0.443982
        c       -0.434351  2.205930  2.186786

Или создавать новые MultiIndex с помощью MultiIndex.from_product и переназначить обратно (длины обоих списков для новых уровней должны совпадать с исходными):

mux = pd.MultiIndex.from_product([['X','Y'], ['a','b','c']], names=['Level 1','Level 2'])
df.index = mux
print (df)
                        a         b         c
Level 1 Level 2                              
X       a       -1.085631  0.997345  0.282978
        b       -1.506295 -0.578600  1.651437
        c       -2.426679 -0.428913  1.265936
Y       a       -0.866740 -0.678886 -0.094709
        b        1.491390 -0.638902 -0.443982
        c       -0.434351  2.205930  2.186786
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...