如何使用melt方法将Pandas DataFrame的列转换为行格式?
我已经查阅了本站大量与melt相关的问题,但都无法实现我想要的效果。
我有如下所示的DataFrame:
我希望通过melt操作将其转换为如下结构:
我已经尝试了Stack Overflow上多种melt与pivot的使用变体,均未得到预期结果。
如果该问题属于重复问题请告知我,因为我尚未找到合适的解决方案。
我的测试DataFrame如下:
stack.to_dict() {'A': {0: 1, 1: 5}, 'B': {0: 2, 1: 6}, 'C': {0: 3, 1: 7}, 'D': {0: 4, 1: 8}}
解决方案
首先构造测试DataFrame:
import pandas as pd df = pd.DataFrame({'A': {0: 1, 1: 5}, 'B': {0: 2, 1: 6}, 'C': {0: 3, 1: 7}, 'D': {0: 4, 1: 8}})
你可以直接用转置的方式实现需求,代码更简洁高效:
res = df.T.rename(columns={0: 'Col1', 1: 'Col2'}).reset_index(names='Group')
如果你指定要用melt实现,可以用以下写法:
res = df.melt(var_name='Group', value_name='value') res['col'] = 'Col' + (res.groupby('Group').cumcount() + 1).astype(str) res = res.pivot(index='Group', columns='col', values='value').reset_index().rename_axis(columns=None)
最终输出结果:
| Group | Col1 | Col2 |
|---|---|---|
| A | 1 | 5 |
| B | 2 | 6 |
| C | 3 | 7 |
| D | 4 | 8 |
内容的提问来源于stack exchange,提问作者SCool
相关产品推荐
相关产品推荐

