У меня есть панд серии с многоиндексной следующим образом:прилагая уровень (с фиксированным значением), чтобы панды Series/DataFrame
category_1 number
A 0 1.764052
1 0.400157
2 0.978738
3 2.240893
4 1.867558
C 0 -0.977278
1 0.950088
2 -0.151357
3 -0.103219
4 0.410599
Оно генерируется из этого кода:
import pandas as pd
import numpy as np
idx = pd.MultiIndex.from_product([['A','C'],range(5)], names=['category_1','number'])
np.random.seed(0)
s = pd.Series(index=idx, data = np.random.randn(len(idx)))
I хотел бы добавить еще один уровень, называемый category_2
к индексу с фиксированным значением (т.е. D
) иметь следующий результат:
category_1 category_2 number
A D 0 1.764052
1 0.400157
2 0.978738
3 2.240893
4 1.867558
C D 0 -0.977278
1 0.950088
2 -0.151357
3 -0.103219
4 0.410599
Я использовал этот Hacky способ сделать это:
df =s.to_frame('dummy')
df['category_2'] = 'D'
df.set_index('category_2', append = True, inplace = True)
df = df.reorder_levels([0,2,1])
res = df['dummy']
Есть ли лучше (более лаконичный/вещий) способ добавления уровня с фиксированным значением к существующим уровням на панд Series/DataFrame?
Спасибо, другим способом является использование from_product: s.index = pd.MultiIndex.from_product ([s.inde x.levels [0], 'D', s.index.levels [1]], names = ['c1', 'c2', 'number']) – motam79
Приятно, для меня работает 's.index = pd. MultiIndex.from_product ([s.index.levels [0], ['D'], s.index.levels [1]], names = ['c1', 'c2', 'number']) ' – jezrael