Вы можете объединить melt и pivot_table. Melt поместит столбцы страны в строки, а сводная таблица даст желаемый результат.
df = pd.DataFrame.from_dict({'Year': [1870, 1870, 1871, 1871, 1872, 1872],
'Measure': ['Population', 'GDP', 'Population', 'GDP', 'Population', 'GDP'],
'Australia': [187, 870, 181, 11, 172, 72],
'Belgium': [ 181, 11, 172, 72, 187, 870,],
'Denmark': [187, 870,187, 870,187, 870,]})
df = df.melt(id_vars=["Year", "Measure"], var_name="Country", value_name="Value")
df = df.pivot_table('Value', ['Year','Country'], 'Measure').reset_index().rename_axis(None, axis=1)
df
Пример выборки: ![enter image description here](https://i.stack.imgur.com/t09qb.png)