gpt4 book ai didi

python - 将列标签的级别附加到 MultiIndex

转载 作者:太空宇宙 更新时间:2023-11-03 11:46:48 25 4
gpt4 key购买 nike

我正在尝试更改 MultiIndex 中的单个级别的列标签。

例如,

test = pd.DataFrame(np.random.random((4,4)))
test.columns = pd.MultiIndex.from_product([['Level1'],['A','B','C','D'],['Level3']])

Out:
Level1
A B C D
Level3 Level3 Level3 Level3
0 0.153388 0.253070 0.338756 0.025598
1 0.818954 0.169352 0.851079 0.823263
2 0.535703 0.432627 0.690446 0.599997
3 0.304654 0.919936 0.095747 0.404449

我想将“3 级”标签更改为 ['1','2','3','4'],但找不到干净的方法。

我已经尝试了下面的方法,它给出了一个包含 16 个元素的可迭代对象,所以这不是我需要的。

test.columns = pd.MultiIndex.from_product([['Level1'],['A','B','C','D'],['1','2','3','4']])

我发现的唯一解决方法是在开始时手动定义每个级别并重新定义 MultiIndex

例如,

level1 = ['Level1','Level1','Level1','Level1']
level2 = ['A','B','C','D']
level3 = ['1','2','3','4']
test = pd.DataFrame(np.random.random((4,4)),columns=[level1,level2,level3])

有没有更简洁的解决方案?我正在处理大型数据集,所以上面的内容非常麻烦。

最佳答案

IIUC 您需要设置级别值,然后分两步设置标签:

In [153]:
test.columns = test.columns.set_levels(['0','1','2','3'],level=2)
test.columns = test.columns.set_labels([0,1,2,3],level=2)
test

Out[153]:
Level1
A B C D
0 1 2 3
0 0.122865 0.778640 0.582170 0.695648
1 0.051477 0.479084 0.150539 0.143929
2 0.362087 0.285109 0.465092 0.205157
3 0.963744 0.730001 0.148460 0.474678

原因是因为最初你的第三层都有相同的标签(0)作为重复的列:

In [155]:
test.columns

Out[155]:
MultiIndex(levels=[['Level1'], ['A', 'B', 'C', 'D'], ['Level3']],
labels=[[0, 0, 0, 0], [0, 1, 2, 3], [0, 0, 0, 0]])

但您想要的是重命名级别和标签,结果如下:

In [158]:
test.columns

Out[158]:
MultiIndex(levels=[['Level1'], ['A', 'B', 'C', 'D'], ['0', '1', '2', '3']],
labels=[[0, 0, 0, 0], [0, 1, 2, 3], [0, 1, 2, 3]])

因此您可以按照您已经尝试过的方式再次重建多索引,或者设置级别值,然后设置标签值,如我上面所示

关于python - 将列标签的级别附加到 MultiIndex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37684151/

25 4 0