<p>你需要每个单词的边界。将<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.str.extractall.html" rel="nofollow noreferrer">^{<cd1>}</a>、<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.add_prefix.html" rel="nofollow noreferrer">^{<cd2>}</a>和<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.join.html" rel="nofollow noreferrer">^{<cd3>}</a>转换为原始<code>DataFrame</code>的一种可能的解决方案:</p>
<pre><code>word_list = ['look','be','him']
pat = '|'.join(r"\b{}\b".format(x) for x in word_list)
df1 = df['ID'].str.extractall('(' + pat + ')', flags = re.I)[0].unstack().add_prefix('Word_')
</code></pre>
<p>对于输出add<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.str.lower.html" rel="nofollow noreferrer">^{<cd5>}</a>中的小写数据:</p>
<pre><code>df1 = (df['ID'].str.lower()
.str.extractall('(' + pat + ')')[0]
.unstack()
.add_prefix('Word_'))
</code></pre>
<hr/>
<pre><code>df = df.join(df1).fillna('')
print (df)
Comments ID Word_0 Word_1 Word_2
0 10 Looking for help
1 11 Look at him but be nice Look him be
2 12 Be calm Be
3 13 Being good
4 14 Him and Her Him
5 15 Himself
</code></pre>
<p>您的解决方案应该按照相同的模式进行更改,将值转换为<code>list</code>s和<code>join</code>转换为原始值:</p>
<pre><code>pat = '|'.join(r"\b{}\b".format(x) for x in word_list)
df1 = (pd.DataFrame(df['ID']
.str.findall(pat, flags = re.I).values.tolist())
.add_prefix('Word_')
.fillna(''))
</code></pre>
<p>或者使用列表理解(应该是最快的):</p>
<pre><code>df1 = (pd.DataFrame([re.findall(pat, x, flags = re.I) for x in df['ID']])
.add_prefix('Word_')
.fillna(''))
</code></pre>
<p>对于小写add <code>.lower()</code>:</p>
<pre><code>pat = '|'.join(r"\b{}\b".format(x) for x in word_list)
df1 = (pd.DataFrame([re.findall(pat, x.lower(), flags = re.I) for x in df['ID']])
.add_prefix('Word_')
.fillna(''))
</code></pre>