我有两个数据帧。两者都有一列numpy数组,每个条目包含3个元素,例如:
0 [0.552347, 0.762896, 0.336009]
1 [0.530716, 0.808313, 0.254895]
2 [0.528786, 0.734991, 0.424469]
3 [0.202799, 0.669395, -0.714691]
4 [0.791936, -0.100072, -0.602347]
6 [0.428896, -0.122712, 0.89498]
如何获取一个数据帧的每一行与另一数据帧的对应行的点积?意思是,我想计算df1的第一个元素与df2的第一个元素,然后计算df1的第二个元素与df2的第二个元素,再计算第三个元素的点积。
答案 0 :(得分:3)
df1 = pd.DataFrame([(np.array([0.552347, 0.762896, 0.336009]), ),
(np.array([0.530716, 0.808313, 0.254895]), )], columns=['v1'])
df2 = pd.DataFrame([(np.array([0.528786, 0.734991, 0.424469]), ),
(np.array([0.202799, 0.669395, -0.714691]), )], columns=['v2'])
pd.concat((df1, df2), axis=1).apply(lambda row: row.v1.dot(row.v2), axis=1)
0 0.995420
1 0.466538
答案 1 :(得分:2)
假设它们的长度与df1,df2相同
[x.dot(y) for x, y in zip(df1.col1.values,df2.col1.values)]
Out[648]: [0.9999995633060001, 1.00000083965]
答案 2 :(得分:0)
手动计算点积非常快。为此,如果两个数据帧共享相同的索引,则可以使用mul
和sum
:
df1.col.mul(df2.col).apply(sum)
如果它们不共享相同的索引(但长度相同),请首先使用reset_index
:
df1.reset_index().col.mul(df2.reset_index().col).apply(sum)
示例:
>>> df1
col
0 [0, 1, 2]
1 [3, 4, 5]
>>> df2
col
0 [5, 6, 7]
1 [1, 2, 3]
>>> df1.col.mul(df2.col).apply(sum)
0 20
1 26