如何在 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)
我有一个像这样的 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)