我有两个数据框。
df1看起来像这样:
col0 col1 col2
0 0.3 0.14 0.34
df2看起来像这样:
col0 col1 col2
0 5 10 15
1 36 30 39
2 42 21 44
3 49 37 34
4 19 14 50
5 28 27 48
6 19 28 45
7 4 7 8
8 31 4 33
9 3 23 43
我想使用列轴将df2乘以df1;即df2的col1到df1的col1; df2的col2到df1的col2; df2的col3到df1的col3。
我寻求的结果:
col0 col1 col2
0 1.5 1.4 5.1
1 10.8 4.2 13.26
2 12.6 2.94 14.96
3 14.7 5.18 11.56
4 5.7 1.96 17
5 8.4 3.78 16.32
6 5.7 3.92 15.3
7 1.2 0.98 2.72
8 9.3 0.56 11.22
9 0.9 3.22 14.62
这是我失败的尝试:
columns = df1.columns
product = df2.multiply(df1[columns], axis=columns)
它会引发“长度不匹配错误”错误。
如何使它起作用?我在各个论坛中进行了搜索,但是找不到符合我确切要求的答案。
答案 0 :(得分:2)
转换为ndarray并相乘-它们应该正确广播。
vals1 = df1.to_numpy()
vals2 = df2.to_numpy()
result = vals1 * vals2
或
df2 * df1.to_numpy()
答案 1 :(得分:0)
解决挑战的方法很长:
columns = df1.columns
index = df2.index
length = len(df2)
df1_array = df1.to_numpy()
df1_tiled = np.tile(df1_array, (length, 1))
df1_tiled_frame = pd.DataFrame(df1_tiled, columns=columns, index=index)
product = df2.multiply(df1_tiled_frame, axis="columns")