如何用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,提问作者Евгения
相关产品推荐
相关产品推荐

