如何在多索引的第 n 级替换所有等于 x 的值
Posted
技术标签:
【中文标题】如何在多索引的第 n 级替换所有等于 x 的值【英文标题】:How do I replace all values equal to x in nth level of a multi index 【发布时间】:2017-02-03 05:42:19 【问题描述】:考虑pd.Series
s
s = pd.Series(np.arange(6),
pd.MultiIndex.from_product([[1, 2], [1, 2, 3]]))
1 1 0
2 1
3 2
2 1 3
2 4
3 5
dtype: int64
我想用4
替换索引中3
的所有值。
我只是想出了这个,我不喜欢它。
lvl0 = s.index.get_level_values(0)
lvl1 = s.index.get_level_values(1)
s.index = pd.MultiIndex.from_tuples(zip(lvl0, np.where(lvl1 == 3, 4, lvl1)))
s
1 1 0
2 1
4 2
2 1 3
2 4
4 5
dtype: int64
【问题讨论】:
【参考方案1】:您可以使用s.index.levels = [[1, 2], [1, 2, 4]]
,但您可能会收到 FutureWarning:
FutureWarning:不推荐直接设置 `levels`。使用 set_levels 而是
所以你可以试试
>>> s.index = s.index.set_levels([[1, 2], [1, 2, 4]])
>>> s
1 1 0
2 1
4 2
2 1 3
2 4
4 5
【讨论】:
【参考方案2】:你可以重置索引
s = s.reset_index()
s[s==3] = 4
In[227]: s
Out[227]:
level_0 level_1 0
0 1 1 0
1 1 2 1
2 1 4 2
3 2 1 4
4 2 2 4
5 2 4 5
【讨论】:
以上是关于如何在多索引的第 n 级替换所有等于 x 的值的主要内容,如果未能解决你的问题,请参考以下文章
将具有多索引的一个 DF 中的值除以另一个 DF 中的值并绘制结果