首页 > 解决方案 > 将多维矩阵相乘以获得具有新列名的新数据框

问题描述

我用 [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}

我正在尝试复制我在 Excel 表中所做的事情

标签: pythonmultidimensional-array

解决方案


将它完全排除在数据帧之外可能更容易,除非您当前在数据帧中拥有信息(在这种情况下,写回,我将向您展示如何做到这一点)。

现在,这可能更容易:

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)

推荐阅读