2016-12-05 5 views
1

私は 'AB'シングルレベルのdfをPandasのマルチレベルdfにマージするには?

A = pd.DataFrame([[1, 5, 2], [2, 4, 4], [3, 3, 1], [4, 2, 2], [5, 1, 4]], 
      columns=['A', 'B', 'C'], index=[1, 2, 3, 4, 5]) 
B = pd.DataFrame([[3, 3, 3], [2, 2, 2], [4, 4, 4], [5, 5, 5], [6, 6, 6]], 
      columns=['A', 'B', 'C'], index=[1, 2, 3, 4, 5]) 

A.columns = pd.MultiIndex.from_product([['A'], A.columns]) 
B.columns = pd.MultiIndex.from_product([['B'], B.columns]) 
AB = pd.concat([A, B], axis = 1) 

マルチレベルのDFを持っていると私はより異なるインデックスを持つ単一レベルのDF 'C' を、持っている 'AB'

私は「Cをマージする必要が
C = pd.DataFrame([[1, 1], [1, 1], [1, 1]], columns=['AA', 'BB'], index=[1, 2, 3]) 

'をdf' AB 'の' B 'レベルに設定します。その結果、このようなマルチレベルを維持する必要があります。

A   B 
    A B C A B C AA BB 
1 1 5 2 3 3 3 1 1 
2 2 4 4 2 2 2 1 1 
3 3 3 1 4 4 4 1 1 
4 4 2 2 5 5 5 
5 5 1 4 6 6 6 

答えて

3

'B'であることの最初のレベルでCMultiIndexを作成し、使用join

C.columns = pd.MultiIndex.from_product([['B'], C.columns]) 
ABC = AB.join(C, how='left') 

結果出力:

A  B     
    A B C A B C AA BB 
1 1 5 2 3 3 3 1.0 1.0 
2 2 4 4 2 2 2 1.0 1.0 
3 3 3 1 4 4 4 1.0 1.0 
4 4 2 2 5 5 5 NaN NaN 
5 5 1 4 6 6 6 NaN NaN 
関連する問題