Панды применяются к индексу dataframe с мульти-индексом - PullRequest
0 голосов
/ 13 июня 2018

У меня есть фрейм данных с индексом вроде

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'])

Теперь я хотел бы применить функцию к индексу I1.Если бы это был простой столбец, я бы сделал что-то вроде

df['I1'] = df['I1'].apply(lamdba x :...)

Как я могу применить это к индексу в df с мультииндексом?

1 Ответ

0 голосов
/ 13 июня 2018

Я считаю, что нужно 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...