2015-03-03 20 views
5

Tôi muốn nối hai khung dữ liệu với các chỉ số giống nhau nhưng các cấp cột khác nhau. Một khung dữ liệu có chỉ mục phân cấp, chỉ mục kia không có.Làm cách nào để hợp nhất hai khung dữ liệu Pandas với các cấp chỉ mục cột khác nhau?

print df1 

       A_1    A_2    A_3    ..... 
       Value_V Value_y Value_V Value_y Value_V Value_y 

instance200 50  0  6500  1  50  0 
instance201 100  0  6400  1  50  0 

kia một:

print df2 

       PV   Estimate 

instance200 2002313 1231233 
instance201 2134124 1124724 

kết quả sẽ giống như thế này:

   PV  Estimate A_1    A_2    A_3    ..... 
            Value_V Value_y Value_V Value_y Value_V Value_y 

instance200 2002313 1231233 50  0  6500  1  50  0 
instance201 2134124 1124724 100  0  6400  1  50  0 

nhưng một merge hoặc nối trên khung sẽ cho tôi một df với một cột một chiều chỉ mục như vậy:

   PV  Estimate (A_1,Value_V) (A_1,Value_y) (A_2,Value_V) (A_2,Value_y) ..... 


instance200 2002313 1231233 50    0    6500   1 
instance201 2134124 1124724 100   0    6400   1 

Làm thế nào tôi có thể giữ chỉ mục phân cấp từ df1?

Trả lời

2

Bạn có thể làm điều này bằng cách làm cho df2 có cùng số lượng như df1:

In [11]: df1 
Out[11]: 
       A_1    A_2    A_3 
      Value_V Value_y Value_V Value_y Value_V Value_y 
instance200  50  0 6500  1  50  0 
instance201  100  0 6400  1  50  0 

In [12]: df2 
Out[12]: 
        PV Estimate 
instance200 2002313 1231233 
instance201 2134124 1124724 

In [13]: df2.columns = pd.MultiIndex.from_arrays([df2.columns, [None] * len(df2.columns)]) 

In [14]: df2 
Out[14]: 
        PV Estimate 
       NaN  NaN 
instance200 2002313 1231233 
instance201 2134124 1124724 

Bây giờ bạn có thể làm các concat mà không mangling tên cột:

In [15]: pd.concat([df1, df2], axis=1) 
Out[15]: 
       A_1    A_2    A_3    PV Estimate 
      Value_V Value_y Value_V Value_y Value_V Value_y  NaN  NaN 
instance200  50  0 6500  1  50  0 2002313 1231233 
instance201  100  0 6400  1  50  0 2134124 1124724 

Lưu ý: để có các cột df2 đầu tiên sử dụng pd.concat([df2, df1], axis=1).


Điều đó nói rằng, tôi không chắc là tôi có thể nghĩ đến một trường hợp sử dụng cho điều này, giữ cho chúng như DataFrames riêng biệt có thể được thực sự là một giải pháp dễ dàng hơn ...!

3

Có lẽ sử dụng phân ole tốt:

df3 = df1.copy() 
df3[df2.columns] = df2 

mang

   A_1    A_2    A_3    PV Estimate 
      Value_V Value_y Value_V Value_y Value_V Value_y     
instance200  50  0 6500  1  50  0 2002313 1231233 
instance201  100  0 6400  1  50  0 2134124 1124724 
Các vấn đề liên quan