我有一个系列,其中索引是标签(字符串),值是矢量。
我想在系列中进行外部连接,其中元素是两个向量的点积。
即
M_ij = sum over k (x_ik*x_jk)
其中x_i是系列中的第i个元素,k是向量的索引(并且被求和)
我知道我可以将我的系列显式转换为矩阵并执行此操作,但我想知道是否有一种“正确”的方法来使用Series / DataFrame对象来处理pandas。我也喜欢保留这些载体所具有的标签的想法。
编辑:
示例数据
x= pd.Series({
'label1': [0,1],
'label2': [1,0],
'label3': [1,1]})
M = function_i_want(x)
M =
1 0 1
0 1 1
1 1 2
Edit2:
这是这样做的笨拙方式
np.dot(np.stack(x),np.stack(x).T)
但是我更喜欢将它作为一系列来完成,以生成一个带有适当标签的数据框用于列/凹痕。
答案 0 :(得分:1)
这是使用numpy进行此操作的更好方法 -
y = np.array(x.tolist())
pd.DataFrame(y.dot(y.T), index=x.index, columns=x.index)
label1 label2 label3
label1 1 0 1
label2 0 1 1
label3 1 1 2
熊猫的方式 -
df = pd.DataFrame(x.tolist(), index=x.index)
df.dot(df.T)
label1 label2 label3
label1 1 0 1
label2 0 1 1
label3 1 1 2