繁体   English   中英

熊猫-多列到“列名-值”列

[英]pandas - multiple columns to “column name - value” columns

我有一个带有多列的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]})

您可以stack以将所有列值堆叠到一个单独的列中,然后删除调用reset_index的第一级索引,用所需的列名覆盖列名,然后最后使用sort_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

您可以按stack重塑为MultiIndex Series ,然后使用sort_values重新reset_index sort_values

df2 = df1.stack().reset_index(level=0, drop=True).reset_index().sort_values('index')
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

一种renameindex renamecolumn name行解决方案:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM