簡體   English   中英

將 dataframe 中的列與另一行中的一行相乘 dataframe

[英]Multiply column in dataframe with one row in another dataframe

我在將兩個不同數據幀中的值相乘時遇到問題。 我正在做 PCA 回歸並想將我所有的載荷乘以原始值。

例如:

PCA dataframe

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

原dataframe:

一種 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 與原始 dataframe 中的每一行相乘,這樣:

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

從第二行插入第一行 dataframe:PC1 = 0x1 + 3x1 + 4x2 + 2x1 + 3x2 + 5x8 = 59 第二行:PC1 = 0x8 + 5x1 +3x2 + 2x2 + 1x3 + 5x2 = 28 第三行:PC1 = 0x9 + 1x3 + 2x5 + 2x1 + 3x3 + 1x5 = 29

新 dataframe:

PC1 PC2
1個 59
2個 28
3個 29

等等。

我的 PCA dataframe 的形狀為 (14,4),我的值 dataframe 的形狀為 (159,14)

如果第一個 DataFrame 的相同長度和第二個DataFrame中相同長度的列名可能乘以 numpy 數組和DataFrame.dot並通過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

您正在尋找點積 - 您可以使用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

利用:

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'])

Output:

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM