【发布时间】:2018-08-05 04:42:04
【问题描述】:
我有一个 pandas 数据框,它定义了我的单词索引包并像这样计数。
id word_count word_idx
15213 1 1192
15213 1 1215
15213 1 1674
15213 1 80
15213 1 179
307 2 103
307 1 80
307 3 1976
我需要一种快速 方法来返回一个词袋数组矩阵。假设我的词汇长度是 2000:VOCAB_LEN = 2000
我目前的解决方案太慢了。但这里是:
功能
def to_bow_array(word_idx_list, word_count_list):
zeros = np.zeros(VOCAB_LEN, dtype = np.uint8)
zeros[np.array(word_idx_list)] = np.array(word_count_list)
return zeros
分组和应用函数
df.groupby('id').apply(lambda row: to_bow_array(list(row['word_idx']),
list(row['word_count'])))
这将返回我的预期输出。对于每一行,类似
array([0, 0, 1, ..., 0, 2, 0], dtype=uint8)
我需要更快的实现。我知道应该避免apply 以实现快速实现。我怎样才能做到这一点?谢谢
【问题讨论】:
-
您是否按照此处的建议检查了
np.where(stackoverflow.com/q/41588034/3512538)?
标签: python performance pandas numpy apply