将多维矩阵相乘以获得具有新列名的新数据框

时间:2018-11-16 20:10:33

标签: python multidimensional-array

我用[6,2]和[3,2]创建了2个DataFrame。我想多个2 DataFrames获得[6,3]矩阵。我正在使用下面的循环,但这给了我一个返回的self._getitem_column(key)错误。下面是一个示例。

df1= pd.DataFrame{[1,2,3,4,5,6],
                  [23,24,25,26,27,28]}
df2= pd.DataFrame{[1,2,3], 
                  [12,13,14]}        

for j in range(len(df2)):    
    for i in range(len(df1)):    
       df3 = (df1[i, 2] * df2[j,2])
#expected result
df3= {0  1       2        3
      1  276     299     322
      2  288     312     336
      3  300     325     350
      4  312     338     364
      5  324     351     378
      6  336     364     392}

I am trying to replicate what I did in an excel sheet

2 个答案:

答案 0 :(得分:0)

将其完全排除在数据框中可能会更容易,除非您当前在数据框中包含信息(在这种情况下,请写回信,我将向您展示如何做到这一点)。

现在,这可能会更容易:

list1 = list(range(23,29)) # note that you have to go one higher to include 28
list2 = list(range(12,15)) # same deal
outputlist = []
for i in list1:
    for j in list2:
        outputlist.append(i * j)

import numpy as np
outputlist = np.array(outputlist).reshape(len(df1),len(df2))
import pandas as pd
df3 = pd.DataFrame(outputlist)

编辑:好的,这可能会把您带到需要去的地方,然后:

list3 = []
for j in range(len(df2)):    
    for i in range(len(df1)):    
       list3.append(df1.loc[i+1,0] * df2.loc[j+1,0])
import numpy as np
list3 = np.array(outputlist).reshape(len(df1),len(df2))
df3 = pd.DataFrame(list3)

再次编辑:试试看!只需确保将“ thenameofthecolumnindf1”替换为您感兴趣的df1中列的实际名称,等等。

import numpy as np
list3 = []
for i in df1[thenameofthecolumnindf1]:    
    for j in df2[thenameofthecolumnindf2]:    
       list3.append(i * j)

list3 = np.array(list3).reshape(len(df1),len(df2))
df3 = pd.DataFrame(list3)

答案 1 :(得分:0)

用于此的数学根本无法工作。要进行矩阵乘法,第一个矩阵(6)中的列数应等于第二个矩阵(2)中的行数。由于行/列值不匹配,您可能会遇到键索引错误。

为了正确地将它们相乘,您必须考虑3个不同的维度,而不仅仅是上面的2个。