计算熊猫系列外部操作矩阵

时间:2017-12-20 18:52:25

标签: python pandas numpy dataframe series

我有一个系列,其中索引是标签(字符串),值是矢量。

我想在系列中进行外部连接,其中元素是两个向量的点积。

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)

但是我更喜欢将它作为一系列来完成,以生成一个带有适当标签的数据框用于列/凹痕。

1 个答案:

答案 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