Python pandas-多列到“;列名-值“;柱

Python pandas-多列到“;列名-值“;柱,python,pandas,stack,multiple-columns,reshape,Python,Pandas,Stack,Multiple Columns,Reshape,我有一个包含多列的pandas数据框,我想将它“展平”为两列—一列有列名,另一列有值。例如 df1 = pd.DataFrame({'A':[1,2],'B':[2,3], 'C':[3,4]}) 如何将其转换为: df2 = pd.DataFrame({'column name': ['A','A','B','B','C','C'], 'value': [1,2,2,3,3,4]}) 您可以通过以下方式重塑形状:多索引系列,然后使用: 将列索引重命名为列名的单行解决方案: df2 = df

我有一个包含多列的pandas数据框,我想将它“展平”为两列—一列有列名,另一列有值。例如

df1 = pd.DataFrame({'A':[1,2],'B':[2,3], 'C':[3,4]})
如何将其转换为:

df2 = pd.DataFrame({'column name': ['A','A','B','B','C','C'], 'value': [1,2,2,3,3,4]})
您可以通过以下方式重塑形状:
多索引
系列
,然后使用:

索引
重命名为
列名
的单行解决方案:

df2 = df1.stack()
         .reset_index(level=0, drop=True)
         .reset_index(name='value')
         .sort_values(['index'])
         .rename(columns={'index':'column name'})
print (df2)
  column name  value
0           A      1
3           A      2
1           B      2
4           B      3
2           C      3
5           C      4
如果需要按两列排序:

df2 = df1.stack().reset_index(level=0, drop=True).reset_index().sort_values(['index',0])
df2.columns = ['column name','value']
print (df2)
  column name  value
0           A      1
3           A      2
1           B      2
4           B      3
2           C      3
5           C      4

您可以
stack
将所有列值堆叠到一个列中,然后删除调用
reset\u index
的第一级索引,用所需的列名覆盖列名,最后使用
sort\u values
进行排序:

In [37]:
df2 = df1.stack().reset_index(level=0, drop=True).reset_index()
df2.columns = ['column name', 'value']
df2.sort_values(['column name', 'value'], inplace=True)
df2

Out[37]:
  column name  value
0           A      1
3           A      2
1           B      2
4           B      3
2           C      3
5           C      4

嗯,差2分钟。。。你觉得怎么样?@jezrael你第一次发布的答案是不正确的,不完整的,因此我发布了我的答案,这在大计划中无关紧要
In [37]:
df2 = df1.stack().reset_index(level=0, drop=True).reset_index()
df2.columns = ['column name', 'value']
df2.sort_values(['column name', 'value'], inplace=True)
df2

Out[37]:
  column name  value
0           A      1
3           A      2
1           B      2
4           B      3
2           C      3
5           C      4