немного сложный вопрос, так как у вас есть дубликат имени в столбцах.
s1=df.melt(['Year','Scenario','Type_1','Type_2'])
# using the melt , and now we are missing the Type column
s2=df.filter(like='Type').reindex(columns=df.columns).ffill(1).melt(['Year','Scenario','Type_1','Type_2'])
# we using mask and ffill to get the type fill in all countries' value , then the dataframe is in the same shape like before , we melt again , this time the value column is the type column
s1['Type']=s2.value
s1=s1.drop(['Type_1','Type_2'],1)
s1
Out[107]:
Year Scenario variable value Type
0 2010 A US 100 Type_1
1 2011 A US 102 Type_1
2 2010 B US 99 Type_1
3 2011 B US 101 Type_1
4 2010 A China 101 Type_1
5 2011 A China 103 Type_1
6 2010 B China 100 Type_1
7 2011 B China 102 Type_1
8 2010 A India 102 Type_1
9 2011 A India 104 Type_1
10 2010 B India 101 Type_1
11 2011 B India 103 Type_1
12 2010 A France 100 Type_1
13 2011 A France 102 Type_1
14 2010 B France 99 Type_1
15 2011 B France 101 Type_1
16 2010 A US 50 Type_2
17 2011 A US 52 Type_2
18 2010 B US 49 Type_2
19 2011 B US 51 Type_2
20 2010 A India 51 Type_2
21 2011 A India 53 Type_2
22 2010 B India 50 Type_2
23 2011 B India 52 Type_2
24 2010 A Germany 52 Type_2
25 2011 A Germany 54 Type_2
26 2010 B Germany 51 Type_2
27 2011 B Germany 53 Type_2