Tạo dataframe tôi:giá trị chỉ số Đổi tên trong dataframe multiindex
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
Tôi muốn đổi tên "đầu tiên" giá trị chỉ số, chẳng hạn như "thanh" -> "con mèo", "baz" -> "con chó ", vv Tuy nhiên, mỗi ví dụ tôi đã đọc hoặc hoạt động trên một chỉ số duy nhất cấp và/hoặc vòng thông qua toàn bộ chỉ mục để có hiệu quả tái tạo nó từ đầu. Tôi đã suy nghĩ một điều gì đó như:
data = data.reindex(index={'bar':'cat','baz':'dog'})
nhưng điều này không hiệu quả, cũng như tôi thực sự mong đợi nó hoạt động trên nhiều chỉ mục. Tôi có thể thực hiện thay thế đó mà không cần lặp qua toàn bộ chỉ mục dataframe không?
Bắt đầu chỉnh sửa
Tôi do dự để cập nhật 0.13 cho đến khi phát hành, vì vậy tôi đã sử dụng workaround sau:
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
đâu là một từ điển được xác định trước mã: cặp chuỗi. Điều này thực sự không phải là lớn của một hiệu suất của mình như tôi đã mong đợi (mất một vài giây để hoạt động trên ~ 1,1 triệu hàng). Nó không phải là đẹp như một lớp lót, nhưng nó hoạt động.
End Sửa
Đây hiện là đề xuất nâng cao cho phiên bản tương lai của gấu trúc: https://github.com/pydata/pandas/issues/4160 (@unutbu soln hoạt động qua ATM) – Jeff