2016-11-02 4 views
1

Wie die Liste in Reihen zu explodieren?Explode mehr Spalten listen in Reihen

ich folgenden Datenrahmen hat:

df = pd.DataFrame([(1,[1,2,3],['a','b','c']),(2,[4,5,6],['d','e','f']),(3,[7,8],['g','h'])]) 

Ich mag die folgende Ausgabe haben:

0 1 2 
0 1 1 a 
1 1 2 b 
2 1 3 c 
3 2 4 d 
4 2 5 e 
5 2 6 f 
6 3 7 g 
7 3 8 h 

Antwort

2

Sie str.len für get Länge von lists verwenden können, die durch numpy.repeat mit flattening lists wiederholt werden:

from itertools import chain 
import numpy as np 

df2 = pd.DataFrame({ 
     0: np.repeat(df.iloc[:,0].values, df.iloc[:,1].str.len()), 
     1: list(chain.from_iterable(df.iloc[:,1])), 
     2: list(chain.from_iterable(df.iloc[:,2]))}) 

print (df2)   
    0 1 2 
0 1 1 a 
1 1 2 b 
2 1 3 c 
3 2 4 d 
4 2 5 e 
5 2 6 f 
6 3 7 g 
7 3 8 h 
+0

Wie funktioniert es? ? – jezrael