如何计算索引匹配的DataFrame对应行的标量积
Pandas 索引匹配行标量积计算方案
测试数据构造
先复现题目中的两个DataFrame:
import pandas as pd # 索引为唯一值的第一个DataFrame df1 = pd.DataFrame( data={"column1": [1, 4, 3], "column2": [2, 5, 3]}, index=["a", "b", "c"] ) # 索引存在重复值的第二个DataFrame df2 = pd.DataFrame( data={"column1": [1, 4, 3, 1, 4, 3], "column2": [2, 5, 3, 2, 5, 3]}, index=["a", "a", "c", "b", "b", "a"] )
实现代码
直接利用pandas自带的索引对齐机制即可,无需手写循环,运行效率高:
result = df2.mul(df1).sum(axis=1).to_frame(name="result")
结果说明
运行后得到的result完全符合要求:
- 行索引和原始df2完全一致,保留重复索引和原有顺序
- 列值为对应索引匹配行的标量积,比如索引为a的第一行,计算逻辑为
1*1 + 2*2 = 5,和预期一致
输出结果如下:
result a 5 a 14 c 18 b 14 b 41 a 9
逻辑解释
df2.mul(df1)会自动按行索引做对齐:df2的每一行都会匹配df1中相同索引的行,对两列对应位置做乘法,哪怕df2索引重复也能正确匹配sum(axis=1)对乘法结果逐行求和,得到的就是两个等长向量的标量积to_frame(name="result")将求和得到的Series转为单列DataFrame,设置列名为要求的result
内容的提问来源于stack exchange,提问作者Ryszard Eggink
相关产品推荐
相关产品推荐

