2017-11-14 6 views
2

Ich habe einen DataFrame, in dem eine der Spalten Strings enthält. Ich möchte die Zeichenfolgen durch Leerzeichen aufteilen und dann die DataTable so transformieren, dass sie ein Wort pro Zeile enthält.Wörter in Zeilen in DataFrame aufteilen

dat = pd.DataFrame(data = {'x' : [1,2], 
          'y' : ['Lorem ipsum dolor sit amet', 
            'consectetur adipiscing elit']}) 

Ich mag würde Datenrahmen wie unten bekommen:

x y 
1 Lorem 
1 ipsum 
... 
2 consectetur 
2 adipiscing 
... 

Was ist der beste Weg, um dies zu erreichen?

Antwort

1

Verwenden split für list s zuerst und dann numpy.repeat mit numpy.concatenate und letzten DataFrame Konstruktor:

s = dat['y'].str.split() 
a = np.repeat(dat['x'].values, s.str.len()) 
b = np.concatenate(s.values) 

df = pd.DataFrame({'x':a,'y':b}) 
print (df) 
    x   y 
0 1  Lorem 
1 1  ipsum 
2 1  dolor 
3 1   sit 
4 1   amet 
5 2 consectetur 
6 2 adipiscing 
7 2   elit 
1

str list, dann verwenden wir stack

dat.y=dat.y.str.split(' ') 
dat.set_index('x').y.apply(pd.Series).stack().reset_index().\ 
     drop('level_1',1).rename(columns={0:'y'}) 
Out[484]: 
    x   y 
0 1  Lorem 
1 1  ipsum 
2 1  dolor 
3 1   sit 
4 1   amet 
5 2 consectetur 
6 2 adipiscing 
7 2   elit 
Verwandte Themen