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

如何用Python高效分析关联多CSV文件行并取数值最大值

最优解决方案:哈希表(字典)分组 + 逐文件迭代

核心思路

用复合键(date+time+name1+name2的组合)作为哈希表的键,值存储每个number字段的当前最大值。遍历所有CSV文件的每一行,对每行生成复合键后,更新哈希表中对应键的各number最大值。这种方法的时间复杂度是O(N)(N为所有文件的总行数),远优于暴力匹配的O(N²)。

具体实现步骤

  • 定义复合键:把每行的date、time、name1、name2组合成唯一标识。比如用元组(Python中直接用(date, time, name1, name2)作为键,因为元组可哈希),或者用特殊分隔符拼接成字符串(比如date|time|name1|name2,注意选不会出现在字段内容里的分隔符)。
  • 初始化哈希表:创建一个字典,键是复合键,值是一个包含7个元素的集合(或字典),初始值设为负无穷,用来记录每个number字段的最大值。
  • 逐文件逐行处理:
    • 读取每个CSV文件的每一行,解析出date、time、name1、name2以及number1到number7(注意把number字段转成数值类型,避免字符串比较出错)。
    • 生成复合键后,检查哈希表中是否存在该键:
      • 不存在的话,直接把当前行的7个number值存入哈希表对应位置。
      • 存在的话,逐个比较当前行的每个number和哈希表中对应位置的值,保留较大的那个。
  • 输出结果:遍历哈希表的键值对,把复合键拆回date、time、name1、name2,加上对应的7个最大值,整理成需要的格式(比如CSV)输出。

方案优势

  • 哈希表的查找和更新都是平均O(1)的操作,全程只遍历所有行一次,没有嵌套循环,彻底避免暴力匹配的重复比较。
  • 可以逐行读取文件,不需要一次性加载所有数据到内存,内存占用仅和唯一复合键的数量有关,适合处理大文件场景。

注意事项

  • 复合键要保证唯一性:如果字段内容可能包含分隔符,优先用元组作为键,避免键冲突。
  • 空值处理:提前定义number字段为空时的规则,比如忽略空值、视为0或负无穷。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 06:02:35