Python 熊猫根据字典替换行的索引

Python 熊猫根据字典替换行的索引,python,pandas,dictionary,dataframe,Python,Pandas,Dictionary,Dataframe,我有一个名为df的数据帧: 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

我有一个名为df的数据帧:

             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:索引不支持可变操作

此外,该系统也不工作

任何关于如何以最高效和干净的方式完成这项工作的想法。如有任何建议,我们将不胜感激。

这应该可以:

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')
这应该起作用:

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')

我认为,
重命名
仍然有效

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

我认为,
重命名
仍然有效

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


请阅读并遵循帮助文档中的发布指南。适用于这里。在您发布MCVE代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中,并重现您描述的问题。请阅读并遵循帮助文档中的发布指南。适用于这里。在您发布MCVE代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中,并重现您描述的问题。它只是将所有行索引替换为Nant。此更改没有任何内容@jp_data_analysis感谢您的解释,但它与我想要的相反。我不是要替换值a,a,b,b。相反,我试图替换那些值的行索引,它们是:0,1,2,3这与字母或数字无关,它与这些字母/数字的位置有关。它只是用Nant替换所有行索引。这没有任何更改@jp_data_analysis感谢您的解释,但它与我想要的相反。我不是要替换值a,a,b,b。相反,我试图替换这些值的行索引,它们是:0,1,2,3这与字母或数字无关,而是与这些字母/数字的位置有关。您是如何做到这一点的,我的数据帧仍然保持不变:(只是想弄清楚你的dic是什么?哦,我成功了!谢谢@Wen@Wen,注意更大的数据帧:@Elisha512啊哈,啦啦队你做了这个工作吗,我的数据帧仍然保持不变:(只是想弄清楚你的dic是什么?哦,我做了!谢谢@Wen@Wen,注意更大的数据帧:@Elisha512啊哈,干杯