Python 熊猫根据字典替换行的索引
我有一个名为df的数据帧: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
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啊哈,干杯