Создание моего фреймворка данных:
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
Я бы хотел переименовать "первые" значения индекса, такие как "bar" → "cat", "baz" → "dog" и т.д. Однако каждый пример, который я прочитал, уровня и/или петли через весь индекс, чтобы эффективно воссоздать его с нуля. Я думал что-то вроде:
data = data.reindex(index={'bar':'cat','baz':'dog'})
но это не работает, и я не ожидаю, что он будет работать с несколькими индексами. Могу ли я сделать такую замену без цикла через весь индекс dataframe?
Начать редактирование
Я не решаюсь обновить до 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
Где находится ранее определенный словарь кода: пары строк. На самом деле это не такая высокая производительность, как я ожидал (требуется пара секунд для работы более ~ 1,1 миллиона строк). Это не так красиво, как однострочный, но он работает.
Редактировать конец