если вы начинаете с пустого фрейма данных, определите его с помощью мультииндексного индекса и столбцов (как вам известно):
df = pd.DataFrame(index=pd.MultiIndex(levels=[[]]*3,
codes=[[]]*3,
names=['Planet','Continent','Country']),
columns=pd.MultiIndex.from_tuples([('X','A'), ('X','B'),
('Y','C'), ('Y', 'D')],))
Затем вы можете просто добавить каждую строку, например:
df.loc[tuple(row1[:3]), :]= row1[3:]
print (df)
X Y
A B C D
Planet Continent Country
Earth Europe England 0.3 0.5 0.6 0.8
и снова после:
df.loc[tuple(row2[:3]), :]= row2[3:]
print (df)
X Y
A B C D
Planet Continent Country
Earth Europe England 0.3 0.5 0.6 0.8
Italy 0.1 0.2 0.4 1.2
, но если у вас есть много доступных строк, ответ @ Yo_Chris будет намного проще