我有一个名为df的pandas数据框:
1 2 3 4 5 6 7 8 9 10
dog jumps 1 1 1 1 1 1 0 1 1 1
fox 1 1 1 1 1 1 0 0 1 1
the 1 1 1 1 1 1 1 0 1 1
dog 1 1 1 1 1 1 0 0 1 1
over 1 1 1 1 1 1 0 0 1 1
fox jumps 1 1 1 1 1 1 0 1 1 1
fox 1 1 1 1 1 1 0 0 1 1
the 1 1 1 1 1 1 1 0 1 1
dog 1 1 1 1 1 1 0 0 1 1
over 1 1 1 1 1 1 0 0 1 1
jumps jumps 1 1 1 1 1 1 0 0 1 0
fox 1 1 1 1 1 1 1 0 1 0
the 1 0 1 1 1 1 0 0 1 0
dog 1 1 1 1 1 1 1 0 1 0
over 1 0 1 1 1 0 0 1 1 0
over jumps 1 1 0 1 0 1 1 0 1 0
fox 1 1 1 1 1 1 0 0 1 0
the 1 0 1 1 1 0 0 1 1 0
dog 1 1 1 1 1 1 0 0 1 0
over 1 1 1 1 1 1 0 0 1 0
the jumps 1 1 0 1 1 1 0 0 1 0
fox 1 1 1 1 1 1 0 1 1 0
the 1 1 1 1 1 1 0 0 1 0
dog 1 1 1 1 1 1 0 1 1 0
over 1 1 0 1 0 1 1 0 1 0
我有以下字典:
dic = {'dog': 1, 'fox': 1, 'the': 2, 'over': 2, 'jumps': 0}
我想用dic中的各自值替换索引的值。
我尝试了以下方法:
df.index.levels[0][0] = 'integer value'
但这不起作用,它给了我错误:
TypeError:索引不支持可变操作
知道如何以最有效和最干净的方式做到这一点。任何建议都将受到高度赞赏。
答案 0 :(得分:2)
我认为rename
仍在工作
df.rename(index=dic)
Out[1311]:
1 2 3 4 5 6 7 8 9 10
1 0 1 1 1 1 1 1 0 1 1 1
1 1 1 1 1 1 1 0 0 1 1
2 1 1 1 1 1 1 1 0 1 1
1 1 1 1 1 1 1 0 0 1 1
2 1 1 1 1 1 1 0 0 1 1
0 1 1 1 1 1 1 0 1 1 1
1 1 1 1 1 1 1 0 0 1 1
2 1 1 1 1 1 1 1 0 1 1
1 1 1 1 1 1 1 0 0 1 1
2 1 1 1 1 1 1 0 0 1 1
答案 1 :(得分:1)
这应该有效:
s = df.index.to_series()
df.index = s.map(dic).fillna(s)
由于某些原因,系列允许通过字典进行映射,但只允许索引函数。
工作示例:
df = pd.DataFrame([['a', 'b', 1], ['a', 'c', 2],
['b', 'd', 3], ['b', 'c', 4]],
columns=['A', 'B', 'C'])
df = df.set_index('A')
print(df.index)
# Index(['a', 'a', 'b', 'b'], dtype='object', name='A')
s = df.index.to_series()
df.index = s.map({'a': 'X'}).fillna(s)
print(df.index)
# Index(['X', 'X', 'b', 'b'], dtype='object', name='A')