2013-03-14 13 views
8

私はにDataFrameを、文字列にはdf.stringsという列を使用しています。それらの文字列の個々の単語を、他の列と同じ値を持つ独自の行に入れたいと思います。私は3つの文字列(とは無関係の列、時間)がある場合例:既存の行の文字列の単語を含むpandasデータフレームに新しい行を作成するにはどうすればよいですか?

Strings Time 
0 The dog 4Pm 
1 lazy dog 2Pm 
2 The fox 1Pm 

を私は、文字列から単語を含む新しい行をしたいが、それ以外は同じ列

Strings --- Words ---Time 
"The dog" --- "The" --- 4Pm 
"The dog" --- "dog" --- 4Pm 
"lazy dog"--- "lazy"--- 2Pm 
"lazy dog"--- "dog" --- 2Pm 
"The fox" --- "The" --- 1Pm 
"The fox" --- "fox" --- 1Pm 

と私はどのように知っていますインデックス&他の変数を保持したまま

string_list = '\n'.join(df.Strings.map(str)) 
    word_list = re.findall('[a-z]+', Strings) 

をしかし、どのように、私は、データフレームの中にこれらを取得することができます:文字列から単語を分割?私はPython 2.7とpandas 0.10.1を使用しています。

EDIT: は、私は今this questionで見つかったGROUPBYを使用して行を拡張する方法を理解する:

def f(group): 
    row = group.irow(0) 
    return DataFrame({'words': re.findall('[a-z]+',row['Strings'])}) 
df.groupby('class', group_keys=False).apply(f) 

私はまだ他の列を維持したいと思います。これは可能ですか?

+1

インデックスがユニークなことになっているので、それは本当に、インデックスを維持しても意味がありません。複数の行に値を展開する方法については、[この類似の質問]を参照してください(http://stackoverflow.com/questions/15255181/questions-about-pandas-expanding-multivalued-column-inverting-and-grouping/15255472#15255472 )。 – BrenBarn

+0

ありがとう!私は自分の質問を編集し、インデックスについての部分を削除しました。今では値を複数の行に展開することができますが、他の列を保存したいと思っています –

答えて

12

私のコードはgroupby()を使用していませんが、もっと速いと思います。

import pandas as pd 
import numpy as np 
import itertools 

df = pd.DataFrame({ 
"strings":["the dog", "lazy dog", "The fox jump"], 
"value":["a","b","c"]}) 

w = df.strings.str.split() 
c = w.map(len) 
idx = np.repeat(c.index, c.values) 
#words = np.concatenate(w.values) 
words = list(itertools.chain.from_iterable(w.values)) 
s = pd.Series(words, index=idx) 
s.name = "words" 
print df.join(s) 

THRE結果:

 strings value words 
0  the dog  a the 
0  the dog  a dog 
1  lazy dog  b lazy 
1  lazy dog  b dog 
2 The fox jump  c The 
2 The fox jump  c fox 
2 The fox jump  c jump 
+0

ありがとう、ありがとう! –

+3

'words = list(itertools.chain.from_iterable(w.values))'が 'words = np.concatenate(w.values)'より優先されるのはなぜですか? – suzanshakya

関連する問題