将数据框中的列与另一个数据框中的一行相乘

原文标题Multiply column in dataframe with one row in another dataframe

我在将两个不同数据帧中的值相乘时遇到问题。我正在做一个 PCA 回归,并希望将我所有的负载与原始值相乘。

例如:

PCA 数据帧

PC1 PC2
X 0 1
X1 1 2
X2 2 1
X3 2 1
X4 3 2
X5 5 4

原始数据框:

A A1 A2 A3 A4 A5
1 1 3 4 1 2 4
2 8 5 3 2 1 2
3 9 3 5 1 3 1

然后我想将 PC1 与原始数据帧中的每一行相乘,这样:

PC1 = 0xA + 1xA1 + 2xA2 + 2xA3 + 3xA4 + 5xA5

从第二个数据帧插入第一行:PC1 = 0x1 + 3×1 + 4×2 + 2×1 + 3×2 + 5×8 = 59第二行:PC1 = 0x8 + 5×1 +3×2 + 2×2 + 1×3 + 5×2 = 28第三行:PC1 = 0x9 + 1×3 + 2×5 + 2×1 + 3×3 + 1×5 = 29

新数据框:

PC1 PC2
1 59
2 28
3 29

等等。

我的 PCA 数据框的形状为 (14,4),我的值数据框的形状为 (159,14)

原文链接:https://stackoverflow.com//questions/71996098/multiply-column-in-dataframe-with-one-row-in-another-dataframe

回复

我来回复
  • Mortz的头像
    Mortz 评论

    您正在寻找一个点积 – 你可以得到它np.dot

    print(df)
        2  3
    1       
    X   0  1
    X1  1  2
    X2  2  1
    X3  2  1
    X4  3  2
    X5  5  4
    
    print(xf)
       2  3  4  5  6  7
    1                  
    1  1  3  4  1  2  4
    2  8  5  3  2  1  2
    3  9  3  5  1  3  1
    
    print(pd.DataFrame(np.dot(xf, df), columns=['PC1', 'PC2']))
       PC1  PC2
    0   39   32
    1   28   33
    2   29   31
    
    2年前 0条评论
  • jezrael的头像
    jezrael 评论

    如果相同长度的第一个DataFrame和第二个 DataFrame 中相同长度的列名可以通过带有DataFrame.dot的 numpy 数组倍增,并通过df1.columns重命名列名:

    df = df2.dot(df1.to_numpy()).rename(columns=dict(enumerate(df1.columns)))
    print (df)
       PC1  PC2
    1   39   32
    2   28   33
    3   29   31
    
    2年前 0条评论
  • keramat的头像
    keramat 评论

    采用:

    string = """    PC1 PC2
    X   0   1
    X1  1   2
    X2  2   1
    X3  2   1
    X4  3   2
    X5  5   4"""
    string2 = """A  A1  A2  A3  A4  A5
    1   3   4   1   2   4
    8   5   3   2   1   2
    9   3   5   1   3   1"""
    data1 = [x.split('  ') for x in string.split('\n')]
    data2 = [x.split('  ') for x in string2.split('\n')]
    
    df1 = pd.DataFrame(np.array([x[1:] for x in data1[1:]], dtype = float), columns = np.array(data1)[0,1:])
    df2 = pd.DataFrame(np.array(data2[1:], dtype = float), columns = data2[0])
    
    
    
    
    
    #Solution
    import numpy as np
    pd.DataFrame(np.dot(df2,df1), columns = ['PC1', 'PC2'])
    

    输出:

    enter image description here

    2年前 0条评论