仅取消堆叠最后三列[重复]

问题描述 投票:0回答:1

我们从这些数据开始:

import numpy as np
import pandas as pd
data=pd.DataFrame(data=np.random.rand(10,5),columns=['headA','headB','tailA','tailB','tailC'])

现在我想执行某个取消堆叠操作,仅取消堆叠最后三列。因此,这应该是新索引:

pd.MultiIndex.from_product([data.columns[-3:],data.index])

MultiIndex([('tailA', 0),('tailA', 1),('tailA', 2),('tailA', 3),('tailA', 4),('tailA', 5),('tailA', 6),('tailA', 7),('tailA', 8),('tailA', 9),('tailB', 0),('tailB', 1),('tailB', 2),('tailB', 3),('tailB', 4),('tailB', 5),('tailB', 6),('tailB', 7),('tailB', 8),('tailB', 9),('tailC', 0),('tailC', 1),('tailC', 2),('tailC', 3),('tailC', 4),('tailC', 5),('tailC', 6),('tailC', 7),('tailC', 8),('tailC', 9)],)

我认为,要执行此操作,我必须将前两列放入与其余三列不同的级别中。我不知道如何以优雅的方式做到这一点。有什么建议吗?

python pandas multi-index
1个回答
0
投票

您可以使用 melt

 
ignore_index=False
,然后使用 
set_index
append=True
:

将新变量列设置为索引
out = (data.melt(data.columns[:-3], ignore_index=False, var_name='tail')
           .set_index('tail', append=True).swaplevel()
      )

输出:

            headA     headB     value
tail                                 
tailA 0  0.587533  0.472803  0.650371
      1  0.465910  0.384050  0.623001
      2  0.376165  0.724400  0.741483
      3  0.589693  0.243686  0.833794
      4  0.695016  0.808199  0.599436
      5  0.976881  0.594713  0.315471
      6  0.599184  0.263577  0.701009
      7  0.524138  0.786585  0.975606
      8  0.030385  0.903692  0.722221
      9  0.175104  0.600267  0.830920
tailB 0  0.587533  0.472803  0.031079
      1  0.465910  0.384050  0.693012
      2  0.376165  0.724400  0.455640
      3  0.589693  0.243686  0.331427
      4  0.695016  0.808199  0.971165
      5  0.976881  0.594713  0.277134
      6  0.599184  0.263577  0.720298
      7  0.524138  0.786585  0.786354
      8  0.030385  0.903692  0.701858
      9  0.175104  0.600267  0.854581
tailC 0  0.587533  0.472803  0.991319
      1  0.465910  0.384050  0.167928
      2  0.376165  0.724400  0.336915
      3  0.589693  0.243686  0.193647
      4  0.695016  0.808199  0.877337
      5  0.976881  0.594713  0.026955
      6  0.599184  0.263577  0.138335
      7  0.524138  0.786585  0.727579
      8  0.030385  0.903692  0.087960
      9  0.175104  0.600267  0.578285
© www.soinside.com 2019 - 2024. All rights reserved.