![](/img/trans.png)
[英]multiply row from one dataframe with matching column in another dataframe and add
[英]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.