Создание моего dataframe:значения индекса Переименования в мультииндексных dataframe
from pandas import *
arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
tuples = zip(*arrays)
index = MultiIndex.from_tuples(tuples, names=['first','second'])
data = DataFrame(randn(8,2),index=index,columns=['c1','c2'])
data
Out[68]:
c1 c2
first second
bar one 0.833816 -1.529639
two 0.340150 -1.818052
baz one -1.605051 -0.917619
two -0.021386 -0.222951
foo one 0.143949 -0.406376
two 1.208358 -2.469746
qux one -0.345265 -0.505282
two 0.158928 1.088826
Я хотел бы переименовать «первый» значение индекса, такие как «бар» -> «кошку», «Баз» -> "собаки »и т. д. Однако каждый пример, который я прочитал, либо работает на одноуровневом индексе, либо/или проходит через весь индекс, чтобы эффективно воссоздать его с нуля. Я думал что-то вроде:
data = data.reindex(index={'bar':'cat','baz':'dog'})
но это не работает, и я не ожидаю, что он будет работать с несколькими индексами. Могу ли я сделать такую замену без цикла через весь индекс данных?
Начало Редактирование
Я Есмь колеблющимся, чтобы обновить 0,13 до релиза, так что я использовал следующий обходной путь:
index = data.index.tolist()
for r in xrange(len(index)):
index[r] = (codes[index[r][0]],index[r][1])
index = pd.MultiIndex.from_tuples(index,names=data.index.names)
data.index = index
Где предыдущий Defined словарь код: строковых пар. На самом деле это не такая высокая производительность, как я ожидал (требуется пара секунд для работы более ~ 1,1 миллиона строк). Это не так красиво, как однострочный, но он работает.
Торцевые Редактировать
В настоящее время это расширенное предложение для будущей версии pandas: https://github.com/pydata/pandas/issues/4160 (@unutbu soln works ATM пока) – Jeff