2017-01-23 4 views
1

Ich habe 2 Datenrahmen Spalten wie folgt aus:Alternative Elemente verschiedener Spalten mit Pandas

df1 = pd.DataFrame({'A':['CINO','KONO','ROLO','MANE','TUTU']}) 
df2 = pd.DataFrame({'B':['NION','PONO','RZCO','MPPE','TQAS']}) 

Meine Idee ist es, die Datenrahmen in einer solchen Art und Weise zu kombinieren, dass die Ausgabe wie folgt aussieht:

 C 
CC1 CINO <---- belongs to A 
CC1 NION <---- belongs to B 
CC2 KONO <---- belongs to A  
CC2 PONO <---- belongs to B 
CC3 ROLO <---- belongs to A 
CC3 RZCO <---- belongs to B 
CC4 MANE <---- belongs to A 
CC4 MPPE <---- belongs to B 
CC5 TUTU <---- belongs to A 
CC5 TQAS <---- belongs to B 

Wie Sie sehen können, befinden sich die Elemente der Spalte B zwischen den Zeilen der Spalte A. Beachten Sie, dass die Zeilen so benannt sind, dass jedes Zeilenpaar denselben Namen hat.

Können Sie mir eine schlaue Art und Weise vorschlagen, dieses Ziel mit einer eingebauten Pandas-Funktion zu erreichen?

Antwort

4
pd.concat(
    [df1, df2], axis=1 
).stack().reset_index(1, drop=True).to_frame('C').rename(index='CC{}'.format) 

     C 
CC0 CINO 
CC0 NION 
CC1 KONO 
CC1 PONO 
CC2 ROLO 
CC2 RZCO 
CC3 MANE 
CC3 MPPE 
CC4 TUTU 
CC4 TQAS 
2

können Sie verwenden:

df = pd.concat([df1.rename(columns={'A':'C'}), 
       df2.rename(columns={'B':'C'})], keys=[1,2]) 
     .sort_index(level=[1,0]) 
     .reset_index(level=0, drop=True) 
df.index = 'CC' + df.index.astype(str) 
print (df) 
     C 
CC0 CINO 
CC0 NION 
CC1 KONO 
CC1 PONO 
CC2 ROLO 
CC2 RZCO 
CC3 MANE 
CC3 MPPE 
CC4 TUTU 
CC4 TQAS