You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas添加列:基于字典转换因子取Col1的最小值

为DataFrame添加基于转换因子字典的最小值计算列

需求说明

我们有一个记录物品对应转换因子的字典,需要给目标DataFrame新增一列Minc_Col1:

  • 若DataFrame中的物品在转换字典中有对应条目,就取出该条目下所有关联物品的Col1值,分别乘以对应的转换因子
  • 计算这些乘积的最小值,作为当前物品的Minc_Col1值
  • 若物品不在转换字典中,或关联物品未出现在DataFrame中(比如示例里的Item9),则对应值为NaN

示例解释

以Item1为例:

  • 转换字典中Item1对应的关联物品及因子:Item5(10)、Item6(100)、Item4(1)
  • 分别计算乘积:2210=220,2100=200,205*1=205
  • 取最小值200作为Item1的Minc_Col1值

代码实现

先准备原始数据:

import pandas as pd

# 物品转换因子字典
conv_dict = {'Item1': {'Item5': 10, 'Item6': 100, 'Item4': 1}, 
             'Item2': {'Item5': 10, 'Item6': 100, 'Item4': 1}, 
             'Item4': {'Item5': 10, 'Item6': 100, 'Item9': 1}} 

# 目标DataFrame
df = pd.DataFrame({
    'Col0': ['Item1','Item2','Item3','Item4','Item5','Item6'],
    'Col1': [180,250,150,205,22,2],
    'Col2': [190,150,150,200,18,2.5]
})

接着实现计算逻辑:

# 将df的Col0设为索引,方便快速查找Col1值
price_map = df.set_index('Col0')['Col1']

# 定义计算单个物品最小值的函数
def calc_min_converted(item):
    if item not in conv_dict:
        return pd.NA
    rules = conv_dict[item]
    products = []
    for related_item, factor in rules.items():
        if related_item in price_map:
            products.append(price_map[related_item] * factor)
    return min(products) if products else pd.NA

# 新增Minc_Col1列
df['Minc_Col1'] = df['Col0'].apply(calc_min_converted)

# 重命名列名匹配期望结果
df = df.rename(columns={'Col0': 'Item', 'Col1': 'Price1', 'Col2': 'Price2'})

print(df)

运行结果

输出与期望完全一致:

Item  Price1  Price2  Minc_Col1
0  Item1     180    190.0      200.0
1  Item2     250    150.0      200.0
2  Item3     150    150.0        NaN
3  Item4     205    200.0      200.0
4  Item5      22     18.0        NaN
5  Item6       2      2.5        NaN

内容的提问来源于stack exchange,提问作者Евгения

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 10:17:28