基于Pandas实现逐行最低价及对应供应商分析需求
Pandas实现逐行筛选最低价供应商并生成采购用DataFrame
实现方案
1. 基础实现(单最低价供应商)
直接利用Pandas内置方法快速计算最低价并匹配对应供应商:
import pandas as pd # 示例输入DataFrame(可替换为你的实际数据) data = { "CODBAR": ["001", "002", "003"], "DESCRI": ["苹果", "香蕉", "橙子"], "PRICE_PROVIDER1": [5.2, 3.1, 4.5], "PRICE_PROVIDER2": [4.8, 3.3, 4.2], "PRICE_PROVIDER3": [5.0, 2.9, 4.7] } df = pd.DataFrame(data) # 提取所有供应商价格列 price_cols = [col for col in df.columns if col.startswith("PRICE_PROVIDER")] # 新增最低价和对应供应商列 df["LOWEST_PRICE"] = df[price_cols].min(axis=1) # 从列名中剥离出供应商名称 df["BEST_PROVIDER"] = df[price_cols].idxmin(axis=1).str.replace("PRICE_", "") # 生成采购用的精简DataFrame purchase_order_df = df[["CODBAR", "DESCRI", "LOWEST_PRICE", "BEST_PROVIDER"]].copy()
2. 处理多供应商同价的情况
如果存在多个供应商报价相同且均为最低价,可自定义逻辑返回所有符合条件的供应商:
def get_all_best_providers(row): min_price = row[price_cols].min() # 筛选出所有报价等于最低价的供应商 matched_providers = [col.replace("PRICE_", "") for col in price_cols if row[col] == min_price] return ", ".join(matched_providers) # 替换原有的供应商列生成逻辑 df["BEST_PROVIDER"] = df.apply(get_all_best_providers, axis=1)
3. 输出结果示例
运行基础实现代码后,purchase_order_df的输出如下:
CODBAR DESCRI LOWEST_PRICE BEST_PROVIDER 0 001 苹果 4.8 PROVIDER2 1 002 香蕉 2.9 PROVIDER3 2 003 橙子 4.2 PROVIDER2
内容的提问来源于stack exchange,提问作者Francisco Sita
相关产品推荐
相关产品推荐

