我想计算两个向量之间的余弦(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?
答案 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