如何将df_a每个值与df_b所有值相乘求和并生成结果列表?
问题描述
我需要将DataFrame df_a 中的每个值与另一个DataFrame df_b 中的所有值相乘,对每个df_a值对应的乘积求和,最终将结果组成列表。
示例:
df_a:
| col_x |
|---|
| 10 |
| 20 |
df_b:
| col_y |
|---|
| 5 |
| 6 |
预期结果:[110, 220](即 [(10×5)+(10×6), (20×5)+(20×6)])
我尝试用for循环实现:
a = [] for x, y in zip(df_a, df_b): i = sum(x * y) a.append(i)
但运行时抛出“float object not being iterable”错误。
解决方案
方法1:利用Pandas向量化运算(推荐)
借助数学简化思路:x*y1 + x*y2 = x*(y1+y2),先算出df_b的总和,再和df_a的每个元素相乘,最后转成列表即可,这种方法效率远高于循环:
df_b_total = df_b['col_y'].sum() result = (df_a['col_x'] * df_b_total).tolist()
执行后result即为[110, 220],完全符合预期。
方法2:修正for循环逻辑
你之前的错误源于zip(df_a, df_b)迭代的是DataFrame的列名,而非列中的具体数值。正确的做法是遍历df_a目标列的每个元素,再与df_b的所有元素相乘后求和:
a = [] for x_val in df_a['col_x']: product_sum = (x_val * df_b['col_y']).sum() a.append(product_sum)
运行这段代码就能得到正确结果,不会再出现迭代错误。
内容的提问来源于stack exchange,提问作者Barnaby Cooper
相关产品推荐
相关产品推荐

