我有一个数据框df
,包含4211行和1列:
bow
0 [(6,1),(8,3),(9,1),...]
1 [(1,1),(3,1),(10,1),...]
2 [(9,2),(12,3),(13,1),...]
...
每行代表一个文档,bow
中的列表是该文档中的word id
及其对应的occurrence times
,采用词袋格式。例如,在第一个文档中,带有id 6
的单词出现了一次,带有id 8
的单词出现了3次。完全有5000
个单词和4211
个文档。
现在,我想将此数据框转换为大doc-word
矩阵,其大小为4211
* 5000
。 m_ij=n
表示文档i
中n
次出现j
次的单词{{1}}。我怎样才能快速实现它?提前致谢!
答案 0 :(得分:1)
转换为numpy数组应加快速度(但我还没有对你的类型和大小的数据进行测试)。
我认为word id
在单行中不会出现多次。
# 1. allocating space for the output array:
output_arr = np.zeros(shape = (len(df), 5000), dtype = int)
# 2. converting DF to np.array (arr_df will be of shape (len(df),1)):
arr_df = np.array(df)
# 3. iterating:
for i in range(len(arr_df)):
# arr_df[i] is a np.array containing a list so we have to use arr_df[i][0] to get to the tuples:
idx, values = zip(*arr_df[i][0])
output_arr[i,idx] = val