我刚收到这个错误,我想不出是什么原因。你能帮忙看看。
这两个数据帧都是4乘4.我无法弄清楚为什么他们不能得到点积。 np.dot
将在这里工作。谢谢。
df1
i1 i2 i3 i4
0 1 0.00000 0.000000 0.000000e+00
1 0 0.85935 0.080730 2.948807e-07
2 0 0.00000 0.832259 9.775291e-02
3 0 0.00000 0.002086 8.392081e-01
df2
i1 i2 i3 i4
0 1 0.00000 0.000000 0.000000e+00
1 0 0.83891 0.090042 3.365395e-07
2 0 0.00000 0.809407 1.080944e-01
3 0 0.00000 0.001577 8.176372e-01
df1.dot(df2)
---------------------------------------------------------------------------
ValueError
<ipython-input-329-95627ce5e4d3> in <module>()
----> 1 df1.dot(df2)
packages\pandas\core\frame.pyc in dot(self, other)
786 if (len(common) > len(self.columns) or
787 len(common) > len(other.index)):
--> 788 raise ValueError('matrices are not aligned')
789
790 left = self.reindex(columns=common, copy=False)
ValueError: matrices are not aligned
答案 0 :(得分:1)
您需要在此处添加T
(Pandas&#39; dot基于索引和列)
df1.dot(df2.T)
Out[634]:
0 1 2 3
0 1.0 0.000000 0.000000 0.000000
1 0.0 0.728186 0.065343 0.000128
2 0.0 0.074938 0.684203 0.081239
3 0.0 0.000188 0.092402 0.686171
答案 1 :(得分:1)
你可以转换为numpy
df1.values.dot(df2.values)
array([[1. , 0. , 0. , 0. ],
[0. , 0.72091731, 0.14272102, 0.00872699],
[0. , 0. , 0.67379042, 0.16988895],
[0. , 0. , 0.00301185, 0.68639325]])
或者您可以切换轴标签
df1.dot(df2.set_index(df2.columns))
i1 i2 i3 i4
0 1.0 0.000000 0.000000 0.000000
1 0.0 0.720917 0.142721 0.008727
2 0.0 0.000000 0.673790 0.169889
3 0.0 0.000000 0.003012 0.686393