使用Multindex列堆叠Multindex数据框

时间:2018-11-12 18:25:16

标签: python pandas dataframe

我正在尝试堆叠一个数据帧,该数据帧的行值具有多个级别,而其列值具有单个级别。原始数据框如下所示(其中“时间”是df.columns中单个级别的名称):

Time                                      +1hr   +2hr   +3hr   ... 
Cytokine Antibody Peptide Concentration
IFNg     CD28     N4     1uM              0.1    0.2.   0.3.   
TNFa.    CD28.    N4.    1uM              0.2    0.4.   0.6.   
...

我正在尝试堆叠数据帧以获取如下输出:

Cytokine                             IFNg  TNFa  ...
Antibody Peptide Concentration Time
CD28     N4.     1uM           +1hr  0.1.  0.2
CD28     N4.     1uM           +2hr  0.2.  0.4
CD28     N4.     1uM           +3hr  0.3.  0.6
...

不幸的是,df.stack()返回此:

Time                                          +1hr  +2hr  +3hr ...
Cytokine Antibody Peptide Concentration Time
IFNg     CD28     N4.     1uM           +1hr  0.1.  na    na
         CD28     N4.     1uM           +2hr  na    0.2.  na
         CD28     N4.     1uM           +3hr  na    na    0.3
TNFa     CD28     N4.     1uM           +1hr  0.2.  na    na
         CD28     N4.     1uM           +2hr  na    0.4.  na
         CD28     N4.     1uM           +3hr  na    na    0.6
...

尽管pandas文档说用单级列堆叠数据帧会输出一系列数据,但是当我尝试堆叠时,即使最终df.columns.nlevels返回1,我最终还是得到了一个大数据帧。当我删除列级别的名称(时间)时,它可以很好地工作,但我想保留该名称。我可以做些什么才能使堆栈正常工作?

1 个答案:

答案 0 :(得分:0)

我自己想出了办法,但认为我也最好记录一下解决方案。如果直接为列值指定了单个级别的名称(例如df.columns.name ='Time'),则按预期进行堆叠。单级多重对象不适用于df.stack()。