Pandas DataFrame:如何将列更改为索引,但此新索引是当前列和索引的组合

时间:2017-07-21 09:21:27

标签: python pandas dataframe

根据标题,我有一个类似的数据框,如:

    c0  c1  c2
i0  1   2   3
i1  40  50  60

我想把它变成这样的东西:

      items
i0 c0  1
i0 c1  2
i0 c2  3
i1 c0  40
i1 c1  50
i1 c2  60

我认为这与multiindexing或groupby有关,但我真的不知道从这个开始。

谢谢。

1 个答案:

答案 0 :(得分:0)

仅使用stack

df = df.stack()
print (df)
i0  c0     1
    c1     2
    c2     3
i1  c0    40
    c1    50
    c2    60
dtype: int64

获取Multiindex

print (df.index)
MultiIndex(levels=[['i0', 'i1'], ['c0', 'c1', 'c2']],
           labels=[[0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2]])

one column DataFrame添加Series.to_frame

df = df.stack().to_frame('items')
print (df)
       items
i0 c0      1
   c1      2
   c2      3
i1 c0     40
   c1     50
   c2     60

对于DataFrame使用MultiIndex创建的列,使用rename_axisreset_index

df = df.stack().rename_axis(('a','b')).reset_index(name='items')
print (df)
    a   b  items
0  i0  c0      1
1  i0  c1      2
2  i0  c2      3
3  i1  c0     40
4  i1  c1     50
5  i1  c2     60