在熊猫中矢量化列表理解

时间:2015-06-23 18:23:38

标签: pandas vectorization list-comprehension

我有一个包含公司名称的数据框。我想根据名称中单词的常见程度计算每个名称的分数。

首先,我建立了一个字数字典。不确定这是否是最干净的方法,但以下矢量化方法有效:

words = itertools.chain.from_iterable(map(list, crsp.cname.str.split()))

然后我算出这些词:

wordcnts = defaultdict(int)
for w in words:
    wordcnts[w] += 1

现在,我想计算每个公司名称的分数,该分数等于公司名称中出现的每个单词的wordcnts[word]的倒数之和。

现在我正在迭代行并使用列表推导来计算总和:

score = {}
for idx, row in crsp.iterrows():
    score[idx] = sum([1/wordcnts[w] for w in row.cname.split()])

有没有办法对最后一步进行矢量化?

1 个答案:

答案 0 :(得分:1)

我认为你可以做两件事来加快速度:

用pd.DataSeries替换wordCnt:

words = itertools.chain.from_iterable(map(list, crsp.cname.str.split()))
wordcnts = pd.Series(collections.Counter(words))

使用pd.DataFrame.apply进行更快的迭代:

score = crsp.cname.apply(lambda x: (1.0/wordcnts[x.split()]).sum())