拆栈数据框并保留列

Rém*_*émi 4 python unpivot dataframe pandas

我有一个过于紧凑的数据框。DataFrame当前是这样的:

> 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
Run Code Online (Sandbox Code Playgroud)

而且我需要像下面这样“拆开”它:

> 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
Run Code Online (Sandbox Code Playgroud)

无论我如何尝试枢纽,我都做对了。

Max*_*axU 5

使用melt()方法:

In [39]: pd.melt(df, id_vars='foo', value_vars=['bar','baz'], var_name='type')
Out[39]:
  foo type value
0   A  bar     1
1   B  bar     2
2   A  baz   NaN
3   B  baz     3
Run Code Online (Sandbox Code Playgroud)

要么

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
Run Code Online (Sandbox Code Playgroud)