计算稀疏矢量之间的距离

时间:2017-02-25 01:34:35

标签: python pandas

我想计算两个向量之间的余弦(scipy)距离。我最初拥有一个带有' 类别'的数据框架。每个

我想使用带有 category 索引的值 value 的向量计算之间的距离。

import pandas as pd
from scipy.spatial.distance import cosine

d = {'person' : ['1', '1', '1', '2', '2', '3', '3', '4', '4'],
 'category' : ['A', 'B', 'C', 'B', 'D', 'E', 'F', 'F', 'D'],
  'value' : [1, 1, 1, 1, 1, 1, 1, 1, 1]}

df = pd.DataFrame(d)

  category person  value
0        A      1      1
1        B      1      1
2        C      1      1
3        B      2      1
4        D      2      1
5        E      3      1
6        F      3      1
7        F      4      1
8        D      4      1

我可以通过创建这样的数据透视表来完成此操作:

pivot = df.pivot_table(index=['person'], columns='category', values='value', aggfunc='sum', fill_value=0)

index person  A  B  C  D  E  F
0          1  1  1  1  0  0  0
1          2  0  1  0  1  0  0
2          3  0  0  0  0  1  1
3          4  0  0  0  1  0  1

但是,我不想这样做(我正在处理大向量,所以pd.pivot_table可能需要一段时间)。

我怎样才能使用原始'稀疏'格式为df?

1 个答案:

答案 0 :(得分:0)

试试这个:

In [30]: pd.crosstab(df.person, df.category).reset_index().rename_axis(None, 1)
Out[30]:
  person  A  B  C  D  E  F
0      1  1  1  1  0  0  0
1      2  0  1  0  1  0  0
2      3  0  0  0  0  1  1
3      4  0  0  0  1  0  1