猿问

如何将多列旋转为两列,同时将列名和值都保留为python中的行条目

我想转换下表:


id   name    2002   2003   2004

1    name1   1      2      3

2    name2   4      5      6

3    name3   7      8      9

对此:


id   name    year   value

1    name1   2002   1

1    name1   2003   2

1    name1   2004   3

2    name2   2002   4

2    name2   2003   5

2    name2   2004   6

3    name3   2002   7

3    name3   2003   8

3    name3   2004   9

我已经得到:


df1.set_index(['id','name'])

  .stack().reset_index(name='a')

  .drop('a', 1)

  .rename(columns={'level_2':'year'})

这让我得到了没有值列的第二个表,我需要做什么来添加值列?


回首忆惘然
浏览 79回答 1
1回答

翻过高山走不出你

您可以使用pd.melt函数实现结果:In [18]: df = df1.melt(id_vars=['id','name'],var_name='year',value_name='value')In [19]: dfOut[19]:   id   name  year  value0   1  name1  2002      11   2  name2  2002      42   3  name3  2002      73   1  name1  2003      24   2  name2  2003      55   3  name3  2003      86   1  name1  2004      37   2  name2  2004      68   3  name3  2004      9
随时随地看视频慕课网APP

相关分类

Python
我要回答