【发布时间】:2013-12-30 01:04:25
【问题描述】:
创建我的数据框:
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'})
但这不起作用,我也不希望它适用于多个索引。我可以在不遍历整个数据帧索引的情况下进行这样的替换吗?
开始编辑
在发布之前我很犹豫是否要更新到 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
以前定义的代码字典在哪里:字符串对。这实际上并没有我预期的那么大(需要几秒钟来操作超过 110 万行)。它不像单线那么漂亮,但它确实有效。
结束编辑
【问题讨论】:
-
目前这是针对未来版本的 pandas 的增强建议:github.com/pydata/pandas/issues/4160(虽然@unutbu soln 可以在 ATM 上使用)
标签: python-2.7 pandas