我有一个大型的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']]
答案 0 :(得分:0)
Gensim只要求输入必须提供句子 迭代时,迭代。无需将所有内容保存在RAM中: 我们可以提供一个句子,处理它,忘记它,加载另一个句子 句子...
因此,您可以使用内存效率generator expression而不是列表理解:
sentences = (group['ACTION'].str.strip().tolist()
for name, group in df.groupby(level=['DATE', 'ID']))
model = gensim.models.Word2Vec(sentences, ...)