根据标题,我有一个类似的数据框,如:
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有关,但我真的不知道从这个开始。
谢谢。
答案 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_axis
和reset_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