У меня есть dataframe с мультииндекс. Я хочу изменить значение второго индекса при выполнении определенных условий для первого индекса. Я нашел аналогичный (но другой) вопрос здесь: Replace a value in MultiIndex (pandas) , который не отвечает моей точке, потому что речь шла об изменении одной строки, и решение передало значение первого индекса (который тоже не нуждался в изменении) тоже , В моем случае я имею дело с несколькими строками, и я не смог адаптировать это решение к моему делу.Замена значений в мультииндексе pandas
Ниже приведен минимальный пример моих данных. Благодаря!
import pandas as pd
import numpy as np
consdf=pd.DataFrame()
for mylocation in ['North','South']:
for scenario in np.arange(1,4):
df= pd.DataFrame()
df['mylocation'] = [mylocation]
df['scenario']= [scenario]
df['this'] = np.random.randint(10,100)
df['that'] = df['this'] * 2
df['something else'] = df['this'] * 3
consdf=pd.concat((consdf, df), axis=0, ignore_index=True)
mypiv = consdf.pivot('mylocation','scenario').transpose()
level_list =['this','that']
# if level 0 is in level_list --> set level 1 to np.nan
mypiv.iloc[mypiv.index.get_level_values(0).isin(level_list)].index.set_levels([np.nan], level =1, inplace=True)
Последняя строка не работает: я получаю:
ValueError: On level 1, label max (2) >= length of level (1). NOTE: this index is in an inconsistent state
было бы вариантом для сброса индекса или вы хотите его сохранить? – MaxU
Я бы хотел его сохранить. Могу я, возможно, сбросить его, а затем добавить его обратно? –
Вместо 'mypiv.iloc [mypiv.index.get_level_values (0) .isin (level_list)]' вы можете использовать 'mypiv.loc [(level_list,)]'. –