2015-03-03 13 views
5

Voglio concatenare due dataframe con gli stessi indici ma diversi livelli di colonna. Un dataframe ha un indice gerarchico, l'altro su doesnt.Come si uniscono due datafram di Pandas con diversi livelli di indice delle colonne?

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 

l'altro:

print df2 

       PV   Estimate 

instance200 2002313 1231233 
instance201 2134124 1124724 

risultato dovrebbe essere simile a questo:

   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 

ma una fusione o concatenare sui telai mi darà un df con una colonna unidimensionale indice come quello:

   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 

Come posso mantenere l'indice gerarchico da df1?

risposta

2

Si potrebbe fare questo facendo DF2 hanno lo stesso numero di livelli come 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 

Ora siete in grado di fare il concat, senza pressare i nomi delle colonne:

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 

Nota: per fare in modo che le colonne df2 utilizzino per la prima volta pd.concat([df2, df1], axis=1).


Detto questo, io non sono sicuro che posso pensare ad un caso d'uso per questo, tenerli come DataFrames separati potrebbe in realtà essere una soluzione più semplice ...!

3

Forse usare il buon assegnazione ole:

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

cede

   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 
Problemi correlati