逐元素乘积矩阵 x 矩阵
element-wise product matrix x matrix
如何按列进行逐元素乘积,我正在寻找一种非循环技术,因为我在每个数据框中有几十列并且宽度大小不同
示例:
mat1=pd.DataFrame({"a":[1,1,1],"b":[2,2,2]})
mat2=pd.DataFrame({"c":[1,1,1],"d":[1,2,3]})
输出
ac ad bc bd
0 1 1 2 2
1 1 2 2 4
2 1 3 2 6
使用DataFrame.mul
with MultiIndex.from_product
and DataFrame.reindex
:
mux = pd.MultiIndex.from_product([mat1.columns, mat2.columns])
df = mat1.reindex(mux, axis=1, level=0).mul(mat2.reindex(mux, axis=1, level=1))
df.columns=[f'{a}{b}' for a, b in df.columns]
print (df)
ac ad bc bd
0 1 1 2 2
1 1 2 2 4
2 1 3 2 6
简单的解决方案
pd.concat((mat2.mul(mat1[c], axis=0).add_prefix(c) for c in mat1), axis=1)
ac ad bc bd
0 1 1 2 2
1 1 2 2 4
2 1 3 2 6
如何按列进行逐元素乘积,我正在寻找一种非循环技术,因为我在每个数据框中有几十列并且宽度大小不同
示例:
mat1=pd.DataFrame({"a":[1,1,1],"b":[2,2,2]})
mat2=pd.DataFrame({"c":[1,1,1],"d":[1,2,3]})
输出
ac ad bc bd
0 1 1 2 2
1 1 2 2 4
2 1 3 2 6
使用DataFrame.mul
with MultiIndex.from_product
and DataFrame.reindex
:
mux = pd.MultiIndex.from_product([mat1.columns, mat2.columns])
df = mat1.reindex(mux, axis=1, level=0).mul(mat2.reindex(mux, axis=1, level=1))
df.columns=[f'{a}{b}' for a, b in df.columns]
print (df)
ac ad bc bd
0 1 1 2 2
1 1 2 2 4
2 1 3 2 6
简单的解决方案
pd.concat((mat2.mul(mat1[c], axis=0).add_prefix(c) for c in mat1), axis=1)
ac ad bc bd
0 1 1 2 2
1 1 2 2 4
2 1 3 2 6