2015-06-26 1 views
1

В следующем DataFrame: Как заменить ["x2", "Total"] на ["x2", "x2"], оставив x1 как есть?Заменить значение в MultiIndex (pandas)

l1   900 902 912  913 916  
l2   ИП ПС ИП ПС ИП ПС ИП ПС ИП ПС 
i1 i2          
x1 Total 10 6 3 3 10 16 2 9 3 8 
x2 Total 1 0 0 0 0 0 0 0 0 0 

.rename заменит все "Total" ценности, а не только тот, что мне нужно.

ответ

1

Предполагая, что ваш dataframe называется df, следующий код выполнит вашу желаемую замену, заменив существующий индекс на модифицированный индекс.

index = df.index 
names = index.names 
index = df.index.tolist()[:1]+[('x2','x2')] 
df.index = pd.MultiIndex.from_tuples(index, names = names) 

Или вы можете напрямую изменить внутренний уровень индекса:

df.index.set_levels([u'Total', u'x2'],level=1,inplace=True) 
df.index.set_labels([0, 1],level=1,inplace=True) 

Вы также можете использовать level='i2' вместо level=1

+0

Я использовал 1-й способ: 'cis_i, ind_l = np.where (t.index.get_level_values ​​("i1") == "x2") [0] [0], t.index.tolist() ' ' t.index = pd.MultiIndex.from_tuples (ind_l [: cis_i] + [("x2", "x2")] + ind_l [cis_i + 1:], names = t.index.names) ' – Winand