将数据框中的列与另一个数据框中的一行相乘
python 184
原文标题 :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)
回复
我来回复-
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年前 -
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年前 -
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'])
输出:
2年前