2017-06-05 3 views
2

Ich habe eine Excel-Datei mit 200 Zeilen, von denen 2 Komma getrennte Werte in ihnen haben. Wenn ich geben sie an Tabula getrennt, würde es so aussehen:explodieren mehrere CSV-Felder in Python

col1 col2 col3 
a  b,c  d,e 
f  g,h  i,j 

Ich brauche einen Datenrahmen so zu explodieren zu bekommen, explodier 200 Zeilen in ~ 4000:

col1 col2 col3 
a  b  d 
a  b  e 
a  c  d 
a  c  e 
f  g  i 
f  g  j 
f  h  i 
f  h  j 

I don‘ Ich sehe keine explodierenden Funktionen in Pandas und konnte nicht herausfinden, wie man die Spalten mit durch Komma getrennten Werten ungleich lang machen kann - nicht sicher, wie Split hier funktionieren würde.

Hilf mir Stack-Overflow, du bist meine einzige Hoffnung. Vielen Dank!

Antwort

5

Verwenden itertools.product alle Kombinationen zwischen col2 und col3 zu bekommen, und sie dann umwandeln in separaten Spalten

from itertools import product 
df.set_index('col1')\ 
    .apply(lambda x: pd.Series(list(product(x.col2.split(','),x.col3.split(',')))),axis=1)\ 
    .stack()\ 
    .reset_index(1,drop=True)\ 
    .apply(pd.Series)\ 
    .reset_index().rename(columns={0:'col1',1:'col3'}) 

Out[466]: 
    col1 col1 col3 
0 a b d 
1 a b e 
2 a c d 
3 a c e 
4 f g i 
5 f g j 
6 f h i 
7 f h j 
+0

Nizza Allen .... +1 –

+0

Dank @ScottBoston – Allen

+0

Ich werde nicht bekommen gefeuert! Haha. Arbeitete wie ein Zauber auf meinen Daten. Danke, @allen & Scott so sehr! Ich muss besser mit Pandas und überprüfen Sie Itertools. Sehr geschätzt. –