Python 将两个不同维度的数据帧相乘
所以我有两个数据帧,一个大小(462,38),另一个大小(36,34)。理论上,我应该能够将它们相乘(第一个没有前两列的矩阵,即(462,36))得到一个大小为(462,34)的矩阵,但我收到了一个错误。这是我正在使用的脚本:Python 将两个不同维度的数据帧相乘,python,pandas,dataframe,Python,Pandas,Dataframe,所以我有两个数据帧,一个大小(462,38),另一个大小(36,34)。理论上,我应该能够将它们相乘(第一个没有前两列的矩阵,即(462,36))得到一个大小为(462,34)的矩阵,但我收到了一个错误。这是我正在使用的脚本: df_technology=df_binary.iloc[:,2::].mul(df_pim.values,axis=0) df_二进制是大小为(462,38)的数据帧 df_pim是大小为(36,34)的数据帧 我得到了这个错误: ValueError: Unable
df_technology=df_binary.iloc[:,2::].mul(df_pim.values,axis=0)
df_二进制是大小为(462,38)的数据帧
df_pim是大小为(36,34)的数据帧
我得到了这个错误:
ValueError: Unable to coerce to DataFrame, shape must be (462, 36): given (36, 34)
对于熊猫来说,这是一个很新的概念,但是对于为什么这不起作用有点困惑。让我们创建一个小玩具示例:
In [6]: import numpy as np
In [7]: import pandas as pd
In [8]: df1 = pd.DataFrame(np.random.rand(462,38))
In [9]: df2 = pd.DataFrame(np.random.rand(36,34))
In [10]: df1.iloc[:, 2:].shape
Out[10]: (462, 36)
让我们试试.mul
:
In [11]: df1.iloc[:, 2:].mul(df2)
Out[11]:
0 1 2 3 4 5 6 7 ... 30 31 32 33 34 35 36 37
0 NaN NaN 0.069152 0.433575 0.237038 0.552856 0.007651 0.305549 ... 0.041911 0.490022 0.093998 0.226641 NaN NaN NaN NaN
1 NaN NaN 0.329819 0.024969 0.305772 0.240036 0.298576 0.076755 ... 0.051576 0.246010 0.164661 0.071771 NaN NaN NaN NaN
2 NaN NaN 0.335649 0.143226 0.086966 0.469313 0.096287 0.323846 ... 0.118156 0.509485 0.019587 0.750393 NaN NaN NaN NaN
3 NaN NaN 0.540942 0.140480 0.201622 0.134188 0.436736 0.318038 ... 0.362616 0.018998 0.553993 0.194979 NaN NaN NaN NaN
4 NaN NaN 0.249867 0.410236 0.036971 0.023470 0.001242 0.023679 ... 0.105056 0.766388 0.356008 0.117736 NaN NaN NaN NaN
5 NaN NaN 0.430849 0.154554 0.048016 0.040484 0.026158 0.923512 ... 0.063798 0.242107 0.088325 0.076771 NaN NaN NaN NaN
6 NaN NaN 0.150360 0.048118 0.089665 0.439097 0.008246 0.000882 ... 0.168322 0.672298 0.144217 0.014767 NaN NaN NaN NaN
7 NaN NaN 0.002987 0.338054 0.242131 0.104348 0.583705 0.008956 ... 0.099933 0.005963 0.209813 0.013677 NaN NaN NaN NaN
8 NaN NaN 0.730034 0.576801 0.702868 0.023938 0.025093 0.359022 ... 0.004573 0.118901 0.181754 0.489394 NaN NaN NaN NaN
9 NaN NaN 0.054859 0.140126 0.526472 0.074119 0.503533 0.138453 ... 0.148497 0.033773 0.199062 0.638204 NaN NaN NaN NaN
10 NaN NaN 0.011797 0.018803 0.279219 0.006031 0.351008 0.808695 ... 0.157058 0.368678 0.391322 0.037119 NaN NaN NaN NaN
11 NaN NaN 0.002085 0.006149 0.440413 0.014603 0.114628 0.052740 ... 0.032606 0.031034 0.627347 0.250106 NaN NaN NaN NaN
12 NaN NaN 0.459560 0.396850 0.323084 0.017022 0.113606 0.114051 ... 0.000245 0.152969 0.007480 0.375953 NaN NaN NaN NaN
13 NaN NaN 0.424696 0.774762 0.742045 0.035061 0.013645 0.344456 ... 0.227203 0.315968 0.272345 0.077855 NaN NaN NaN NaN
14 NaN NaN 0.074256 0.545422 0.107654 0.313041 0.276494 0.347180 ... 0.216622 0.266681 0.044627 0.643293 NaN NaN NaN NaN
15 NaN NaN 0.083460 0.003905 0.680099 0.468907 0.034795 0.298261 ... 0.547690 0.045437 0.059649 0.574525 NaN NaN NaN NaN
16 NaN NaN 0.130475 0.413133 0.046050 0.069645 0.156101 0.117565 ... 0.108358 0.026304 0.381912 0.232132 NaN NaN NaN NaN
17 NaN NaN 0.365677 0.238611 0.185642 0.528028 0.051163 0.739312 ... 0.167501 0.613983 0.138576 0.508531 NaN NaN NaN NaN
18 NaN NaN 0.010499 0.694223 0.064765 0.250918 0.219200 0.405163 ... 0.036581 0.579350 0.029583 0.487232 NaN NaN NaN NaN
19 NaN NaN 0.553498 0.622697 0.059322 0.120012 0.243311 0.351804 ... 0.784040 0.222959 0.637571 0.557461 NaN NaN NaN NaN
20 NaN NaN 0.152201 0.536858 0.126313 0.089983 0.091302 0.248702 ... 0.214070 0.035524 0.345542 0.114386 NaN NaN NaN NaN
21 NaN NaN 0.170115 0.157332 0.108346 0.093566 0.492156 0.052809 ... 0.224359 0.763030 0.837852 0.007604 NaN NaN NaN NaN
22 NaN NaN 0.107562 0.125040 0.075692 0.101576 0.025918 0.197318 ... 0.088839 0.336992 0.290796 0.367974 NaN NaN NaN NaN
23 NaN NaN 0.001356 0.723209 0.078923 0.159972 0.094777 0.198491 ... 0.225621 0.059736 0.782560 0.678412 NaN NaN NaN NaN
24 NaN NaN 0.205520 0.019794 0.075210 0.000622 0.119975 0.116428 ... 0.392006 0.460143 0.238348 0.598957 NaN NaN NaN NaN
25 NaN NaN 0.004261 0.003159 0.003675 0.108487 0.344357 0.218113 ... 0.002379 0.126916 0.522164 0.019517 NaN NaN NaN NaN
26 NaN NaN 0.217224 0.052694 0.508061 0.028095 0.244016 0.057007 ... 0.160138 0.285628 0.447312 0.000999 NaN NaN NaN NaN
27 NaN NaN 0.066310 0.149280 0.772441 0.078405 0.200181 0.392209 ... 0.334078 0.029189 0.129492 0.159437 NaN NaN NaN NaN
28 NaN NaN 0.288818 0.679855 0.418685 0.432491 0.185340 0.754593 ... 0.124270 0.288381 0.033000 0.033425 NaN NaN NaN NaN
29 NaN NaN 0.301348 0.286180 0.048910 0.116658 0.331689 0.272144 ... 0.180669 0.050509 0.156428 0.001210 NaN NaN NaN NaN
.. .. .. ... ... ... ... ... ... ... ... ... ... ... .. .. .. ..
432 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
433 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
434 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
435 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
436 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
437 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
438 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
439 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
440 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
441 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
442 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
443 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
444 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
445 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
446 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
447 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
448 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
449 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
450 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
451 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
452 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
453 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
454 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
455 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
456 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
457 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
458 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
459 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
460 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
461 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN
[462 rows x 38 columns]
In [17]: df1.iloc[:, 2:].dot(df2.values)
Out[17]:
0 1 2 3 4 ... 29 30 31 32 33
0 9.971979 6.981089 8.694962 8.276216 8.351839 ... 8.480659 8.414970 8.240727 9.672677 7.565088
1 9.410364 8.590233 8.195569 9.140421 8.921937 ... 8.570695 7.076403 10.040924 8.267829 8.325542
2 11.095329 9.576891 9.809456 10.026001 10.696129 ... 9.234288 8.387796 11.306832 10.665649 8.983012
3 10.195718 8.550438 9.006633 9.628953 9.156615 ... 8.921587 7.133165 10.254906 9.561331 8.968170
4 10.169194 9.450612 8.424815 8.513062 8.537338 ... 8.358502 8.129391 9.731362 9.567829 8.041028
5 8.699785 7.506038 7.247128 8.637461 7.905982 ... 7.635597 6.348187 8.452615 7.902099 7.091182
6 9.231585 7.692058 7.744410 8.488541 8.450400 ... 7.932535 6.753257 8.688555 8.658745 7.056945
7 9.622983 8.674558 6.987342 8.077567 7.955983 ... 8.264570 6.685770 9.142239 9.154905 7.833893
8 11.309864 9.142239 8.419535 8.680210 9.712205 ... 8.717705 7.664762 10.649243 9.459739 8.912268
9 11.334008 8.958880 8.296706 9.420058 9.756113 ... 9.399543 7.366976 10.139639 10.154981 8.350516
10 11.181974 10.031747 9.294010 11.156024 10.066875 ... 9.613627 8.053175 11.583264 10.818940 9.330073
11 9.980280 8.311433 7.501879 8.494200 7.832875 ... 8.457131 7.320341 9.921714 8.975098 8.443220
12 9.740919 8.728053 7.673338 8.007482 9.291362 ... 8.483178 6.957094 9.554731 8.977761 7.974371
13 11.167700 10.239565 11.016358 11.550972 10.918983 ... 9.373120 9.645397 12.572644 11.505732 9.894803
14 10.680348 8.988366 9.009413 8.823574 9.424792 ... 8.959995 8.185815 9.940674 9.927982 8.334847
15 11.830672 10.053389 9.302099 10.251534 9.440460 ... 10.139816 9.478568 10.860152 11.184854 8.287742
16 9.339399 8.916890 7.187363 8.922513 8.426588 ... 7.944471 7.323630 9.814955 8.656069 7.053032
17 11.143226 8.808918 9.178566 8.847451 9.175966 ... 9.158147 7.899361 9.656798 9.994228 8.879669
18 9.889310 8.284430 7.786766 8.221434 8.435520 ... 7.373773 6.921359 8.685328 9.677998 8.130656
19 11.021434 9.315304 7.878728 9.712656 9.381570 ... 8.506453 7.138838 9.409518 10.872490 8.920906
20 8.465932 7.376756 7.873896 8.216718 7.981726 ... 7.606467 6.071998 8.783477 8.713840 6.978514
21 10.044225 8.490197 7.624420 8.063905 8.485409 ... 8.590962 6.953432 10.188383 8.691053 7.867377
22 10.055971 8.596160 8.004438 8.487240 8.243792 ... 8.232528 6.805463 9.322255 10.063531 7.578448
23 11.260788 10.345866 8.547624 9.151512 9.672593 ... 8.784488 8.244342 10.440683 11.396178 9.597543
24 11.289788 9.181376 9.678903 9.205845 10.020440 ... 9.945561 8.558815 10.285292 10.364807 8.624407
25 9.735467 7.731079 7.858442 8.098820 7.329694 ... 8.992903 7.179417 8.045042 8.872422 7.592073
26 8.951750 7.260067 8.087883 8.625076 7.796546 ... 8.368493 6.549368 8.282185 8.082291 7.088356
27 8.493655 7.288378 7.554746 7.793805 7.555760 ... 7.146606 5.828258 7.744346 8.613483 7.455887
28 9.915362 8.161043 9.110862 9.147840 8.513224 ... 8.676128 7.878927 8.752682 10.031502 8.360679
29 11.225115 8.611056 9.385648 9.472114 9.581927 ... 8.964314 8.321400 10.043396 10.177277 8.422191
.. ... ... ... ... ... ... ... ... ... ... ...
432 7.627470 5.734383 6.626045 6.156603 7.429465 ... 6.461749 5.636417 6.518002 6.925516 5.183975
433 11.643077 10.056751 9.313494 10.320367 9.455274 ... 9.992466 8.058518 11.759124 11.398521 9.627579
434 9.011228 8.956598 7.391039 8.274706 8.709996 ... 7.739301 7.270689 8.638466 8.497952 7.203451
435 9.265928 7.693394 8.228558 7.400204 8.619893 ... 7.547710 7.003936 8.839432 9.568429 7.334440
436 9.920282 9.012674 8.142472 9.055654 9.253443 ... 8.413467 6.989122 8.762788 9.328164 7.850035
437 9.944510 7.895858 7.797087 8.212704 8.687516 ... 8.068419 6.169651 8.120617 9.299318 6.777742
438 10.494847 8.672840 9.410736 9.288373 9.146171 ... 9.597911 7.760452 10.141617 10.452433 9.498194
439 9.867494 8.142811 8.214623 8.060762 9.040205 ... 8.427159 7.106905 10.524450 9.292304 8.472231
440 10.130309 8.778968 8.098571 9.036090 9.253507 ... 8.885713 7.310063 10.105144 9.545208 8.807030
441 10.251218 7.729740 7.370521 8.384513 6.958638 ... 8.240842 6.977351 9.267558 9.143776 7.798779
442 8.748951 7.197680 7.028517 7.348912 7.809581 ... 7.896705 6.635679 6.819049 8.045874 6.039097
443 11.703053 9.065089 8.927836 9.542447 9.241294 ... 9.779255 8.794765 10.497803 9.763386 8.408181
444 11.433442 10.707882 10.134235 11.019976 10.722692 ... 9.853438 8.556864 11.099727 11.881496 9.348087
445 8.794981 7.614707 7.855584 8.671275 7.436318 ... 7.282331 6.869884 8.410838 8.980563 7.358201
446 8.735594 7.520451 7.336556 8.235567 7.554697 ... 6.827973 6.302846 8.694671 7.736256 7.746888
447 8.930933 7.674217 7.478743 8.077684 7.300099 ... 7.524244 6.481388 9.119867 8.043605 6.514627
448 9.701053 7.237276 8.207318 8.704792 8.145399 ... 8.176370 7.334896 7.827332 9.504545 8.012765
449 9.932439 8.175081 7.803909 9.206564 9.782949 ... 9.125961 7.279960 8.518182 9.648755 7.742197
450 9.365815 8.567567 7.579989 8.670692 9.055934 ... 7.980583 6.721377 9.921531 9.309550 8.125973
451 9.075117 8.108147 8.607631 8.185085 7.895500 ... 8.036308 6.766023 9.057757 9.009128 7.459431
452 9.059566 8.659570 7.626333 9.360041 8.226206 ... 7.634966 7.739625 8.960765 8.781221 7.528786
453 8.432637 7.678105 7.610083 7.640916 8.305286 ... 6.888020 6.553264 8.646732 8.628493 7.721341
454 9.055456 7.311839 7.413838 7.267197 7.253457 ... 7.585661 7.061526 8.355587 8.697914 7.646652
455 9.516074 8.071045 8.149921 9.263839 8.287315 ... 7.421049 6.959464 9.453780 9.958168 8.350330
456 10.070524 8.916685 9.093280 9.447184 9.086083 ... 9.234514 7.800037 10.031802 9.686283 9.196937
457 10.726476 8.270430 7.704192 8.026725 9.541432 ... 8.338713 6.688143 8.785184 10.426090 8.658769
458 9.751500 7.310215 8.136909 8.312466 7.316233 ... 7.874102 7.796568 9.434560 7.996315 8.094219
459 9.501868 8.039517 7.932875 8.385449 8.937402 ... 8.569393 6.948936 7.823537 9.030505 7.035568
460 9.476510 7.735094 7.266457 9.046955 8.358792 ... 8.635297 7.403172 8.382819 8.930228 6.963464
461 10.638806 9.091559 8.946520 9.440301 10.823085 ... 8.734041 7.767178 9.745443 9.859176 8.198679
[462 rows x 34 columns]
这是可行的,但有很多价值观。这是因为.mul
执行数据帧的元素乘法,并期望数据帧的形状为(A,B)x(A,B)
使用df2.values时,我们可以重现您的错误,因为pandas试图从(36,34)
df2.values numpy数组中创建(462,36)
数据帧,但失败:
In [13]: df1.iloc[:, 2:].mul(df2.values, axis=0)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-13-e33efa65ac07> in <module>()
----> 1 df1.iloc[:, 2:].mul(df2.values, axis=0)
~/miniconda3/envs/so_question/lib/python3.6/site-packages/pandas/core/ops.py in f(self, other, axis, level, fill_value)
1515 def f(self, other, axis=default_axis, level=None, fill_value=None):
1516
-> 1517 other = _align_method_FRAME(self, other, axis)
1518
1519 if isinstance(other, ABCDataFrame): # Another DataFrame
~/miniconda3/envs/so_question/lib/python3.6/site-packages/pandas/core/ops.py in _align_method_FRAME(left, right, axis)
1438 "must be {req_shape}: given {given_shape}"
1439 .format(req_shape=left.shape,
-> 1440 given_shape=right.shape))
1441
1442 right = left._constructor(right, index=left.index,
ValueError: Unable to coerce to DataFrame, shape must be (462, 36): given (36, 34)
矩阵乘法的相同规则适用于数据帧。您的形状必须是(M,N)x(N,P)什么是
df_binary.iloc[:,2:]。?(462,36)是有效的大小。我无法用随机生成的数据帧重现您的问题。嗯。。。可能是类型问题?我在我的数据上运行它,虽然它不会产生任何错误,但它给我的值是“0000100001100000”,而不是一个数字,如“10”。有什么想法吗?你能添加一个最小的,[完整且可验证的例子]()来重现你的问题吗?查看我的