python - 如何替换多索引第 n 级中等于 x 的所有值

标签 python pandas numpy multi-index

考虑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

最佳答案

您可以使用s.index.levels = [[1, 2], [1, 2, 4]],但您可能会收到 FutureWarning:

FutureWarning: setting `levels` directly is deprecated. Use set_levels instead

所以你可以尝试一下

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

关于python - 如何替换多索引第 n 级中等于 x 的所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39693359/

相关文章:

python - 使用 tensorflow 中的另一个索引列表访问张量的元素

python - 如何拆分字符串输入并 append 到列表? Python

python - Pandas Shift 将整数转换为 float 和整数

python - Docker-Python脚本输入错误

python-3.x - Pandas 水平填充 NA 值,但仅限于一个前向填充值

python - 在 python 中使用正则表达式提取日期

python - 导入numpy

python - 获取二维数组中连续区域边界的路径

python - 将 1 维 numpy 数组克隆到 3 维时出现维序问题

python - 保存前 django 模型与两个模型的关系