Python 为另一个多索引数据帧连接多索引数据帧

Python 为另一个多索引数据帧连接多索引数据帧,python,pandas,Python,Pandas,我有两个数据帧,每个数据帧都有一个列的多索引,如下所示: d1 = {('a', 'c'):1, ('a', 'd'):1, ('b', 'c'):1, ('b', 'd'):1} d2 = {('a', 'c'):2, ('a', 'd'):2, ('b', 'c'):2, ('b', 'd'):2} df1 = pd.DataFrame ([d1, d2]) df2 = pd.DataFrame ([d2, d2]).map (lambda x: x*2) df1.columns = pd

我有两个数据帧,每个数据帧都有一个列的多索引,如下所示:

d1 = {('a', 'c'):1, ('a', 'd'):1, ('b', 'c'):1, ('b', 'd'):1}
d2 = {('a', 'c'):2, ('a', 'd'):2, ('b', 'c'):2, ('b', 'd'):2}
df1 = pd.DataFrame ([d1, d2])
df2 = pd.DataFrame ([d2, d2]).map (lambda x: x*2)

df1.columns = pd.MultiIndex.from_tuples (df1.columns)
df2.columns = pd.MultiIndex.from_tuples (df2.columns)

In [62]: df1
Out[62]: 
   a     b   
   c  d  c  d
0  1  1  1  1
1  1  1  1  1

[2 rows x 4 columns]

In [63]: df2
Out[63]: 
   a     b   
   c  d  c  d
0  2  2  2  2
1  2  2  2  2

[2 rows x 4 columns]
我想将这两个数据帧合并在一起,以实现列上的继承人体系结构索引,其中顶层是它起源于的数据帧的名称,后跟当前的列名。就是

In [64]: merged_df.df1.a.c
Out[64]: 
0    1
1    1
Name: c, dtype: int64

In [64]: merged_df.df2.a.c
Out[64]: 
0    2
1    2
Name: c, dtype: int64

我如何才能做到这一点?谢谢

您不应该在帧上使用map,仅供参考(它无论如何都不存在),您可以使用
applymap
,但使用矢量化操作更有效

In [12]: df2 = pd.DataFrame ([d2, d2])**2

In [14]: df2.columns = pd.MultiIndex.from_tuples (df2.columns)

In [15]: df2
Out[15]: 
   a     b   
   c  d  c  d
0  4  4  4  4
1  4  4  4  4

[2 rows x 4 columns]

In [16]: df1
Out[16]: 
   a     b   
   c  d  c  d
0  1  1  1  1
1  2  2  2  2

[2 rows x 4 columns]
Concat在一起并使用keys参数

In [18]: concat([df1,df2],keys=['df1','df2'],axis=1)
Out[18]: 
   df1           df2         
     a     b       a     b   
     c  d  c  d    c  d  c  d
0    1  1  1  1    4  4  4  4
1    2  2  2  2    4  4  4  4

[2 rows x 8 columns]

In [19]: concat([df1,df2],keys=['df1','df2'],axis=1).df2.a.c
Out[19]: 
0    4
1    4
Name: c, dtype: int64
在0.14(即将推出)中,您将希望使用它进行切分:(并完全阅读索引文档)