python - 满足第一级条件时更改第二级多索引标签

标签 python pandas multi-index

我有一个多索引 df,它有两个索引级别,如下所示:

    dfx = pd.DataFrame(np.random.rand(4, 2),
                  index=[['a', 'a', 'b', 'b'], ['aa', 'zz', 'gg', 'zz']],
                  columns=['data1', 'data2'])
    dfx

         data1     data2
a aa  0.847741  0.723235
  zz  0.236876  0.343141
b gg  0.759153  0.546190
  zz  0.481285  0.600514

我只想在第一级索引具有特定值的情况下更改索引标签。即仅在第一个标签为 b 时更改 zz 索引

Objective, get:

         data1     data2
a aa    0.847741  0.723235
  zz    0.236876  0.343141
b gg    0.759153  0.546190
  water 0.481285  0.600514

如果我使用 .rename() 匹配的所有索引都会更改

dfx.rename(index={('zz') : 'water'}, inplace = True)
dfx

            data1     data2
a aa     0.847741  0.723235
  water  0.236876  0.343141
b gg     0.759153  0.546190
  water  0.481285  0.600514

我尝试了以下代码行,但这似乎没有任何作用。

dfx.loc['b','zz'].rename(index={'zz' : 'water'}, inplace = True)
dfx.loc['b'].rename(index={'zz' : 'water'},  inplace = True)

我查阅了文档,但一直在努力寻找解决方案。 我在这里做错了什么?

最佳答案

我们可以使用MultiIndex.map

d = {('b', 'zz'): ('b', 'water')}
dfx.index = dfx.index.map(lambda i: d.get(i, i))

            data1     data2
a aa     0.567847  0.844618
  zz     0.752874  0.794704
b gg     0.854358  0.512400
  water  0.237905  0.211369

关于python - 满足第一级条件时更改第二级多索引标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68849527/

相关文章:

python - 如何将 Pandas DataFrame 存储为 HDF5 PyTables 表(或 CArray、EArray 等)?

python - 在多索引 Pandas 数据框中添加每个 2 级索引的总数

python - Pandas :在多索引数据框中转换索引类型

Python - 从可能返回 None 的函数中设置变量的安全且优雅的方法

python - 星火管道错误

python - 在我的情况下如何在Docker中启动容器

python - 删除多个字符并加入 pandas 列

python - Pandas 如何过滤系列

python - 在 Pandas 的 GroupBy 中检查负滚动窗口中的条件

python - Pandas 为层次索引的内层增加值(value)