Ну, Равишанкар указал мне в правильном направлении. В процессе поиска я нашел (почти), как это сделать, используя concat
с групповыми ключами и двойным стеком:
foo = pds.concat(dict(f1 = frame1, f2 = frame2), axis=1)
foo.stack().stack()
Date
2001 AA f1 1
f2 10
BB f1 5
f2 50
2002 AA f1 2
f2 20
BB f1 6
f2 60
Однако этот метод создаст серию с несколькими индексами, что не подходит для всех ситуаций.
Чтобы создать фрейм данных с одним индексом (годами), можно использовать следующее:
bar = foo.stack().stack().reset_index(level=[1,2]).
Затем столбцы могут быть переименованы в соответствии с необходимостью.