Python 取消数据帧堆栈并保留列

Python 取消数据帧堆栈并保留列,python,pandas,dataframe,unpivot,Python,Pandas,Dataframe,Unpivot,我有一个太“紧凑”的数据帧。数据帧当前如下所示: > import numpy as np > import pandas as pd > df = pd.DataFrame({'foo': ['A','B'], 'bar': ['1', '2'], 'baz': [np.nan, '3']}) bar baz foo 0 1 NaN A 1 2 3 B 我需要把它“拆开”成这样: &

我有一个太“紧凑”的数据帧。数据帧当前如下所示:

> import numpy as np
> import pandas as pd

> df = pd.DataFrame({'foo': ['A','B'],
               'bar': ['1', '2'],
               'baz': [np.nan, '3']})
  bar  baz foo
0   1  NaN   A
1   2    3   B
我需要把它“拆开”成这样:

> df = pd.DataFrame({'foo': ['A','B', 'B'],
               'type': ['bar', 'bar', 'baz'],
               'value': ['1', '2', '3']})

  foo type value
0   A  bar     1
1   B  bar     2
2   B  baz     3
无论我如何尝试旋转,我都无法正确旋转。

使用方法:


将索引设置为foo,然后堆叠:

df.set_index('foo').stack()

foo     
A    bar    1
B    bar    2
     baz    3
dtype: object

这是一个系列,而不是一个系列DataFrame@Rémi,添加
.reset_index()
将获得所需的结果;-)事实上,它也有效。抱歉@Steven G,我无法将两个答案都标记为正确。
In [38]: pd.melt(df, id_vars='foo', value_vars=['bar','baz'], var_name='type').dropna()
Out[38]:
  foo type value
0   A  bar     1
1   B  bar     2
3   B  baz     3
df.set_index('foo').stack()

foo     
A    bar    1
B    bar    2
     baz    3
dtype: object