我有以下数据:
df = pd.DataFrame.from_dict({'id' : ['001', '002', '003'], 'name' : ['Louis', 'Tom', 'Jane'],
'Operating Systems': [67, 54, 77], 'Data Structures' : [88, 67, 90], 'Calculus' : [71, 53, 66]})它显示了下表:
id name Operating Systems Data Structures Calculus
001 Louis 67 88 71
002 Tom 54 67 53
003 Jane 77 90 66我要下表:
id name subject mark
001 Louis Operating Systems 67
002 Tom Data Structures 88
003 Jane Calculus 71
001 Louis Operating Systems 54
002 Tom Data Structures 67
003 Jane Calculus 53
001 Louis Operating Systems 77
002 Tom Data Structures 90
003 Jane Calculus 66如何将我的数据转换为获得这个结果?
发布于 2020-04-30 22:08:06
使用df.melt
In [875]: df.melt(id_vars=['id','name'], var_name='subject', value_name='mark')
Out[875]:
id name subject mark
0 001 Louis Operating Systems 67
1 002 Tom Operating Systems 54
2 003 Jane Operating Systems 77
3 001 Louis Data Structures 88
4 002 Tom Data Structures 67
5 003 Jane Data Structures 90
6 001 Louis Calculus 71
7 002 Tom Calculus 53
8 003 Jane Calculus 66或
In [877]: df.set_index(['id','name']).stack().reset_index(name='mark').rename(columns={'level_2':'subject'})
Out[877]:
id name subject mark
0 001 Louis Operating Systems 67
1 001 Louis Data Structures 88
2 001 Louis Calculus 71
3 002 Tom Operating Systems 54
4 002 Tom Data Structures 67
5 002 Tom Calculus 53
6 003 Jane Operating Systems 77
7 003 Jane Data Structures 90
8 003 Jane Calculus 66https://stackoverflow.com/questions/61533498
复制相似问题