将两个具有不同维度的数据框相乘

时间:2018-07-13 17:14:17

标签: python pandas dataframe

所以我有两个数据帧,一个是大小(462,38),另一个是(36,34)。从理论上讲,我应该能够将它们相乘(第一个不包含前两列,使其为(462,36)),并得到大小为(462,34)的矩阵,但是我收到错误。这是我正在使用的脚本:

df_technique = df_binary.iloc[:,2:].mul(df_pim.values, axis=0)

df_binary是大小为(462,38)的数据帧 df_pim是大小为(36,34)的数据框

我收到此错误:

ValueError: Unable to coerce to DataFrame, shape must be (462, 36): given (36, 34)

熊猫还很陌生,但对为什么它不起作用有些困惑。

1 个答案:

答案 0 :(得分:0)

让我们创建一个玩具示例:

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]

这可行,但是有很多NaN值。这是因为.mul对DataFrame进行元素逐个乘法,并期望DataFrame的形状为(A, B) x (A, B)

使用df2.values时,我们可以重现您的错误,因为熊猫试图从(462, 36) df2.values numpy数组中创建一个(36, 34) DataFrame并失败:

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)

从您的描述来看,您打算使用.dot而不是(M, N) x (N, P) = (M, P)来进行矩阵乘法.mul

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]