乘以不同维度的数据框 Pandas:列数相同,但行数不同

Posted

技术标签:

【中文标题】乘以不同维度的数据框 Pandas:列数相同,但行数不同【英文标题】:Multiplying Dataframes with Different Dimensions Pandas: Same Number of Columns, But Different Number of Rows 【发布时间】:2020-07-26 00:20:53 【问题描述】:

我有两个数据框。

df1,形状为 (1, 3), df2,形状为 (10, 3)。

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)

它会引发“长度不匹配错误”错误。

可以做些什么来让它发挥作用?我搜索了论坛,但找不到符合我确切要求的答案。

【问题讨论】:

如果您给我们几个示例数据框 - df1 = pd.DataFrame(...,那就太好了 - 这样我们就可以从您的问题中复制而不是让我们为您完成工作。请阅读minimal reproducible example。 尺寸无法复制和粘贴。不挤屏幕。也许我可以创建一个更小的按比例缩小的框架? 是的,一个最小的 toy/fake 示例对于您的 mre 来说是可以接受的,只要他们忠实地代表/重现问题。 - 在这种情况下,形状 (1,5) 和 (3,5) 就足够了。 ...像df1 = pd.DataFrame(np.ones((1,5))*2);df2 = pd.DataFrame(np.arange(21*19).reshape(3,5)) 这样的东西总是很有帮助的。 好的,我已经编辑过了。 试试:df2.mul(df1.to_numpy()) 【参考方案1】:

转换为 ndarray 并进行乘法 - 它们应该正确广播。

vals1 = df1.to_numpy()
vals2 = df2.to_numpy()

result = vals1 * vals2

或者

df2 * df1.to_numpy()

【讨论】:

【参考方案2】:

解决这个挑战还有很长的路要走:

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")

【讨论】:

以上是关于乘以不同维度的数据框 Pandas:列数相同,但行数不同的主要内容,如果未能解决你的问题,请参考以下文章

pandas - 追加具有不同列数的新行

熊猫:将汇率查询乘以另一个数据框的相同日期后,按每日金额求和和汇总

当列数事先未知时如何访问 Pandas 数据框列

pandas merge(how="inner") 结果大于两个数据框

解析具有未知列数的 Pandas 数据框以在 statsmodels.api 中使用

将文本拆分到pandas数据框中:处理不同维度的文本。