更快地从Pandas Dataframe创建列表列表

时间:2014-12-15 14:29:30

标签: python pandas

我有一个大型的pandas数据框,格式如下

DATE         ID    ACTION
01/12/2014    1       A
01/12/2014    1       B
02/12/2014    1       C
02/12/2014    1       D
01/12/2014    2       E
02/12/2014    2       F
02/12/2014    2       E
04/12/2014    2       G

可以按如下方式创建数据:

import pandas as pd

df = pd.DataFrame({'DATE': ['01/12/2014','01/12/2014','02/12/2014','01/12/2014','02/12/2014','02/12/2014','02/12/2014','04/12/2014' ],
                   'ID': [1,1,1,1,2,2,2,2],
                   'ACTION': ['A', 'B', 'C', 'D', 'E', 'F', 'E', 'G']})

由此我想为每个日期/ ID分组创建一个列表列表。目前我正在做的事情......它有效,但我有数百万行,所以需要花费数小时才能运行。有没有更有效的方法来实现相同的结果?

listoflists = [group['ACTION'].str.strip().tolist() for name, group in df.groupby(level=['DATE', 'ID'])]

输出:

[['A', 'B', 'D'], ['C'], ['E', 'F', 'E'], ['G']]

1 个答案:

答案 0 :(得分:0)

符合this tutorial

  

Gensim只要求输入必须提供句子   迭代时,迭代。无需将所有内容保存在RAM中:   我们可以提供一个句子,处理它,忘记它,加载另一个句子   句子...

因此,您可以使用内存效率generator expression而不是列表理解:

sentences = (group['ACTION'].str.strip().tolist() 
             for name, group in df.groupby(level=['DATE', 'ID']))

model = gensim.models.Word2Vec(sentences, ...)