Я считаю, что нужно rename
:
df = df.rename(lambda x: 'a' + x, level=0)
Или Index.get_level_values
для выбора уровня MultiIndex
, map
, а затем создать MultiIndex.from_arrays
:
idx = df.index.get_level_values('I1').map(lambda x: 'a' + x)
df.index = pd.MultiIndex.from_arrays([idx, df.index.get_level_values('I2')])
потому что я получаю:
df.index = df.index.set_levels(idx, level='I1')
ValueError: значения уровня должны быть уникальными: ['aA', 'aA', 'aB', 'aB ',' aC ',' aD ',' aD ',' aE ',' aE ',' aF ',' aF ',' aG ',' aG '] на уровне 0
Образец :
mux = pd.MultiIndex(levels=[['A', 'B', 'C', 'D', 'E', 'F', 'G'], [0, 1]],
labels=[[0, 0, 1, 1, 2, 3, 3, 4, 4, 5, 5, 6, 6], [0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1]],
names=['I1', 'I2'])
df = pd.DataFrame([0] * 13, index=mux, columns=['a'])
df = df.rename(lambda x: 'a' + x, level=0)
print(df)
a
I1 I2
aA 0 0
1 0
aB 0 0
1 0
aC 1 0
aD 0 0
1 0
aE 0 0
1 0
aF 0 0
1 0
aG 0 0
1 0