繁体   English   中英

在熊猫数据框中转换多索引行中的某些行

[英]convert some rows in rows of a multiindex in pandas dataframe

可以说我有一个熊猫数据框,如下所示:

     A      B      C      D
0    a0     b0     c0     d0
1    a1     b1     c1     d1
2    a2     b2     c2     d2
3    a3     b3     c3     d3

我想知道如何将其转换为此。

                   A      B
0    C      c0     a0     b0          
     D      d0     a0     b0          
1    C      c1     a1     b1          
     D      d1     a1     b1          
2    C      c2     a2     b2          
     D      d2     a2     b2          
3    C      c3     a3     b3          
     D      d3     a3     b3          

基本上是将几列作为行并创建一个多索引。

好吧, melt将以您想要的形式获得它,然后您可以根据需要设置索引:

print df

0  a0  b0  c0  d0
1  a1  b1  c1  d1
2  a2  b2  c2  d2
3  a3  b3  c3  d3

现在使用melt进行堆栈(请注意,我重置了索引并将该列用作id_var因为看起来您想要[0,1,2,3]索引包括在堆栈中):

new = pd.melt(df.reset_index(),value_vars=['C','D'],id_vars=['index','A','B'])
print new

  index   A   B variable value
0      0  a0  b0        C    c0
1      1  a1  b1        C    c1
2      2  a2  b2        C    c2
3      3  a3  b3        C    c3
4      0  a0  b0        D    d0
5      1  a1  b1        D    d1
6      2  a2  b2        D    d2
7      3  a3  b3        D    d3

现在只需设置索引(对索引进行排序,然后设置索引以使其看起来像所需的输出即可):

new = new.sort(['index']).set_index(['index','variable','value'])
print new

                       A   B
index variable value        
0     C        c0     a0  b0
      D        d0     a0  b0
1     C        c1     a1  b1
      D        d1     a1  b1
2     C        c2     a2  b2
      D        d2     a2  b2
3     C        c3     a3  b3
      D        d3     a3  b3 

如果不需要[0,1,2,3]作为堆栈的一部分,那么melt命令会更干净一些:

print pd.melt(df,value_vars=['C','D'],id_vars=['A','B'])

    A   B variable value
0  a0  b0        C    c0
1  a1  b1        C    c1
2  a2  b2        C    c2
3  a3  b3        C    c3
4  a0  b0        D    d0
5  a1  b1        D    d1
6  a2  b2        D    d2
7  a3  b3        D    d3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM