如何从多个数据帧创建分层多索引数据帧?

How to create hiearchical multi-index dataframe from multiple dataframes?

我有多个形状相同的数据框,比如:

d1 = {'time': [1,2,3,4], 'A': [55.5,55.5,55.5,55.5], 'B':[55.5,55.5,55.5,55.5]}
d2 = {'time': [1,2,3,4], 'A': [7,6,5,4], 'B':[9,8,7,6]}
d3 = {'time': [1,2,3,4], 'A': [1,2,3,4], 'B':[2,3,4,5]}

df1 = pd.DataFrame(data = d1)
df2 = pd.DataFrame(data = d2)
df3 = pd.DataFrame(data = d3)

它们将始终具有相同的列名,并且“时间”列中的条目将始终相同。我想以某种方式合并它们,我得到一个层次索引,即

index  frame     'time'    'A'       'B'
0      1         1         55.5      55.5
       2         1         7         9
       3         1         1         2
1      1         2         55.5      55.5
       2         2         6         8
       3         2         2         3
...

我已经尝试过 .merge() 和 .join() 以及 .concatenate() 的各种选项,但我似乎无法理解它。实现此目的最优雅的方法是什么?

IIUC,您可以对索引进行连接和排序:

dfs = [df1, df2, df3]

(pd
 .concat(dict(enumerate(dfs, start=1)), names=['frame', 'index'])
 .sort_index(level='index')
 .swaplevel()
)

输出:

             time     A     B
index frame                  
0     1         1  55.5  55.5
      2         1   7.0   9.0
      3         1   1.0   2.0
1     1         2  55.5  55.5
      2         2   6.0   8.0
      3         2   2.0   3.0
2     1         3  55.5  55.5
      2         3   5.0   7.0
      3         3   3.0   4.0
3     1         4  55.5  55.5
      2         4   4.0   6.0
      3         4   4.0   5.0