如何在 Pandas 中转换格式

How to convert format in Pandas

我有一个像这样的 cvs 格式的数据文件:

StudentID  Math  Physics  Chemistry  History
001        80       90        95       98
002        99       85        90       70
003        77       80        95       90

我想要的格式是这样的:

StudentID  Math          Score
001        Math          80
001        Physics       90
001        Chemistry     95
001        History       98
002        Math          99
002        Physics       85
002        Chemistry     90
002        History       70
003        Math          77
003        Physics       80
003        Chemistry     95
003        History       90

如何在Pandas中进行这种格式转换?提前致谢。

考虑到我正在重新创建您的 dataframe 并使用 pandas.melt

import pandas as pd
df = pd.DataFrame({"StudentID":['001','002','003'],
                   "Math":[80,99,77],
                   "Physics":[90,85,80],
                   "Chemistry":[95,90,95],
                   "History":[98,70,90]})

df1 = df.melt(id_vars=['StudentID'])

输出df1:

   StudentID   variable  value
0        001       Math     80
1        002       Math     99
2        003       Math     77
3        001    Physics     90
4        002    Physics     85
5        003    Physics     80
6        001  Chemistry     95
7        002  Chemistry     90
8        003  Chemistry     95
9        001    History     98
10       002    History     70
11       003    History     90

感谢 Jon Clements 的投入

试试我的方法....

import pandas as pd
d = {'ID': [0, 1, 2, 3], 'history': pd.Series([3, 4,5,6]), 'math': pd.Series([5, 6,7,8])}
df = pd.DataFrame(data=d)
print(df)

df2 = df
df.drop(['ID'],axis=1)
print(df)
columns = df.columns

df_results = pd.DataFrame()
for i in columns:
    df_temp = pd.DataFrame()
    df_temp['ID'] = df2['ID']
    df_temp['Course']= i
    df_temp['Score']= df2[i]
    df_results  = pd.concat([df_results,df_temp])
    
print(df_results)