8

我有一个DataFrame用文本字符串pandas调用的列。df.strings我想将这些字符串的各个单词放在它们自己的行上,而其他列的值相同。例如,如果我有 3 个字符串(以及一个不相关的列,时间):

    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。

编辑:我现在了解如何使用在此问题中找到的 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)

我仍然想保留其他列。这可能吗?

4

1 回答 1

13

这是我不使用的代码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)

三个结果:

        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
于 2013-03-14T11:19:41.650 回答