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

Python不借助Pandas/Numpy遍历CSV行按多维度求最高金额供应商方法

实现思路

用两层字典存储中间数据是最直观的方案,逻辑并不复杂,你原有代码的问题主要是分支判断不全、语法错误、未处理表头导致的。整体只需要两步:

  1. 遍历CSV行跳过表头,累加每个(Unit, Period)分组下每个供应商的总金额
  2. 遍历每个(Unit, Period)分组,筛选出组内总金额最高的供应商输出即可
修正后可运行代码
# 测试CSV数据
cv = "Unit,SupplierID,ReceivedPeriod,Amount/n5400,0213123,6,3450.87/n5400,0521332,6,5902.21/n5400,0213123,6,4506.46/n6300,0293899,7,9801.10/n6300,0381923,7,6203.76"
lines = cv.split("/n")
# 第一层key为(Unit, Period)元组,第二层key为SupplierID,value为累计金额
sum_data = {}

for index, line in enumerate(lines):
    # 跳过表头行
    if index == 0:
        continue
    unit, supplier_id, period, amount = line.split(",")
    # 组合分组key,用元组比拼接字符串更方便后续处理
    group_key = (unit, period)
    
    # 分组不存在则初始化
    if group_key not in sum_data:
        sum_data[group_key] = {}
    # 供应商不存在则初始化金额
    if supplier_id not in sum_data[group_key]:
        sum_data[group_key][supplier_id] = 0.0
    # 累加金额,保留两位小数
    sum_data[group_key][supplier_id] = round(sum_data[group_key][supplier_id] + float(amount), 2)

# 遍历分组取最高金额
for (unit, period), supplier_amount in sum_data.items():
    # 按金额排序取最大值
    max_supplier, max_amount = max(supplier_amount.items(), key=lambda x: x[1])
    # 按要求格式输出
    print(f"{unit},{period} - {max_amount:.2f}")
输出结果
5400,6 - 7957.33
6300,7 - 9801.10

完全匹配预期输出要求。

内容的提问来源于stack exchange,提问作者Blake Daniel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:48:04