我有一个带有多索引的pandas系列,希望用单独列表中的值替换其中一个级别。我找到了一个解决方法,但是我想知道是否有更直接的方法来实现这一点。这个问题还涉及set_levels()
的工作,我似乎不明白。在
这是我的系列
>>> res
name StringNum
A 2013 3203
4135 579
7881 30600
7890 575
9067 30600
9233 30600
B 5378 30600
7881 30600
C 5121 30600
...
N 9895 3935
U 1270 30600
3049 30600
Length: 4213, dtype: float64
我有一个清单RepNum
我想用StringNum
的索引值替换哪些值。
现在我实现如下目标
newres = pd.concat([res,pd.Series(res.index.get_level_values('name').tolist(),index=res.index),pd.Series(RepNum,index=res.index)],axis=1)
newres.set_index([1,2],inplace=True)
newres.index.names = ['name','StringNum']
>>> newres
0
name StringNum
A 2013_x 3203
4135_y 579
7881_x 30600
7890_x 57
9067_z 30600
9233_w 30600
B 5378_y 30600
7881_y 30600
C 5121_z 30600
...
这就是我想要的。不过,我本以为res.index.set_levels([res.index.get_level_values('name').tolist(),RepNum],inplace=True)
会以一种更优雅、更实用的方式来完成相同的操作,但是结果序列显示了错误的索引值到相应的列条目
name StringNum
A 7890_x 3203
9147_b 579
5113_x 30600
5134_v 575
7289_w 30600
9543_b 30600
9895_y 30600
5113_x 30600
7003_v 30600
9067_z 624
7804_w 30600
...
您还可以看到name A
现在有比实际更多的条目(A
在原始系列中只有6个条目)。顺便说一句,尝试res = pd.Series(res.values, index=NewIndex)
也会得到同样的错误结果,其中NewIndex = pd.MultiIndex.from_arrays([res.index.get_level_values('name').tolist(),RepNum], names=('name','number'))
。有人能开导我吗?在
目前没有回答
相关问题 更多 >
编程相关推荐