Python Pandas DataFrame间映射计算及结果存入字典实现求助
Python实现产品-组件成本映射与最大值计算
数据准备
产品-组件对应表
products components c1 c2 c3 c4 p1 1 0 1 0 p2 0 1 1 0 p3 1 0 0 1 p4 0 1 0 1
组件-项目成本对应表
items cost components i1 i2 i3 i4 c1 0 10 30 0 c2 20 10 0 0 c3 0 0 10 15 c4 20 0 0 30
计算逻辑
每个产品的计算流程:
- 筛选产品对应的组件(表格中值为1的列)
- 对每个项目(i1-i4),汇总对应组件的成本
- 取所有项目成本总和中的最大值
- 最终生成以产品名为键、最大值为值的字典
示例逻辑:
{p1: [c1,c3] } -> {p1: [i2+i3,i3+i4] } -> {p1: [40,25] } -> {p1: 40 }
{p2: [c2,c3] } -> {p2: [i1+i2,i3+i4] } -> {p2: [30,25] } -> {p2: 30 }
{p3: [c1,c4] } -> {p3: [i2+i3,i1+i4] } -> {p3: [40,50] } -> {p3: 50 }
{p4: [c2,c4] } -> {p4: [i1+i2,i1+i4] } -> {p4: [30,50] } -> {p4: 50 }
代码实现
import pandas as pd # 构造产品-组件对应DataFrame prod_comp = pd.DataFrame( [[1, 0, 1, 0], [0, 1, 1, 0], [1, 0, 0, 1], [0, 1, 0, 1]], index=['p1', 'p2', 'p3', 'p4'], columns=['c1', 'c2', 'c3', 'c4'] ) # 构造组件-项目成本对应DataFrame comp_cost = pd.DataFrame( [[0, 10, 30, 0], [20, 10, 0, 0], [0, 0, 10, 15], [20, 0, 0, 30]], index=['c1', 'c2', 'c3', 'c4'], columns=['i1', 'i2', 'i3', 'i4'] ) # 计算每个产品的最大成本 result = {} for prod in prod_comp.index: # 获取当前产品关联的组件 components = prod_comp.loc[prod][prod_comp.loc[prod] == 1].index.tolist() # 提取对应组件的成本数据 comp_cost_sub = comp_cost.loc[components] # 按项目汇总成本 item_sums = comp_cost_sub.sum(axis=0).tolist() # 取最大值存入结果字典 result[prod] = max(item_sums) print(result) # 输出: {'p1': 40, 'p2': 30, 'p3': 50, 'p4': 50}
代码说明
- 用
pandas构造两个目标DataFrame,确保索引、列名与需求完全匹配 - 遍历每个产品,筛选出该产品绑定的组件列表
- 提取组件对应的成本数据,按项目维度求和
- 对求和结果取最大值,最终生成目标字典
内容的提问来源于stack exchange,提问作者simon leung
相关产品推荐
相关产品推荐

