我想將一個資料幀(df_a)中的值乘以另一個資料幀(df_b)中的值,然后將這些值相加,并將它們附加到df_a中的所有值。例如 df_a:
col_x |
---|
10 |
20 |
和df_b:
col_y |
---|
5 |
6 |
將導致:[(10 x 5) (10 x 6), (20 x 5) (20 x 6)] 或 [110, 220]
我認為這可以在 for 回圈中完成:
for x, y in zip(df_a, df_b):
i = sum(x * y)
a.append(i)
但這會引發浮動物件不可迭代的錯誤。
uj5u.com熱心網友回復:
numpy 廣播的完美作業:
x = df_a["col_x"].to_numpy()
y = df_b["col_y"].to_numpy()[:, None]
(x * y).sum(axis=0)
uj5u.com熱心網友回復:
無需復雜的回圈或廣播。(10 x 5) (10 x 6)
等于10*(5 6)
。所以首先對第二個系列求和,然后將第一個與這個標量相乘。
out = df_a['col_x']*df_b['col_y'].sum()
輸出:
0 110
1 220
Name: col_x, dtype: int64
作為陣列:
out = df_a['col_x'].to_numpy()*df_b['col_y'].sum()
輸出:array([110, 220])
與外部產品的替代品:
import numpy as np
np.outer(df_a['col_x'], df_b['col_y']).sum(axis=1)
輸出:array([110, 220])
uj5u.com熱心網友回復:
您可以使用broadcasting
.
>>> (df_a.values * df_b.values.reshape(1, -1)).sum(axis=1)
[110, 220]
解釋:
>>> df_1.values
array([[10],
[20]])
>>> df_2.values.reshape(1, -1)
array([[5, 6]])
>>> df_1.values * df_2.values.reshape(1, -1)
array([[ 50, 60],
[100, 120]])
uj5u.com熱心網友回復:
當您實際將它們用作陣列時,為什么要使用具有一列的資料框?只需使用numpy
:
a = np.array([10, 20])
b = np.array([5, 6])
np.matmul(a, b) np.matmul(a, b[::-1])
# 330
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/531555.html
標籤:Python熊猫
上一篇:將列資料從資料框中轉置為行