取消堆叠数据框并保留列
Posted
技术标签:
【中文标题】取消堆叠数据框并保留列【英文标题】:Unstack dataframe and keep columns 【发布时间】:2017-05-29 15:18:22 【问题描述】:我有一个过于“紧凑”的 DataFrame。 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
而且我需要将它“拆散”成这样:
> 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
无论我如何尝试旋转,我都无法正确。
【问题讨论】:
【参考方案1】:使用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
或
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
【讨论】:
【参考方案2】:将您的索引设置为 foo,然后堆栈:
df.set_index('foo').stack()
foo
A bar 1
B bar 2
baz 3
dtype: object
【讨论】:
这给出了一个系列而不是一个数据帧 @Rémi,添加.reset_index()
会给你想要的结果 ;-)
确实,它也有效。抱歉@Steven G,我无法将两个答案都标记为正确。以上是关于取消堆叠数据框并保留列的主要内容,如果未能解决你的问题,请参考以下文章