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

如何从多个同结构CSV文件中提取每行的最大值对应记录?

如何从多个结构相同的CSV文件中按类别提取最大值记录?

问题描述

我有若干结构相同的CSV文件,每个文件的内容如下(示例):

File 1

Id  Values
A1  0.2
B1  0.5
C1  0.1
D1  0.3

File 2

Id  Values
A2  0.1
B2  0.4
C2  0.8
D2  0.1

File 3

Id  Values
A3  0.4
B3  0.2
C3  0.05
D3  0.9

File 4

Id  Values
A4  0.7
B4  0.1
C4  0.3
D4  0.2

需要从所有文件中,针对每一行的类别(A类、B类、C类、D类,即Id的首字母)提取Values列数值最大的对应Id和Values记录,最终期望得到如下结果:

Id  Values
A4  0.7
B2  0.4
C2  0.8
D3  0.9

解决方案

这里有两种实用的方法,分别适合不同的使用场景:

方法1:使用Python脚本(适合需要灵活扩展的场景)

这个方法通过Python的csv模块处理文件,逻辑清晰,后续调整需求也很方便:

import csv
import glob

# 初始化字典,存储每个类别(A/B/C/D)的最大Values和对应Id
max_records = {}

# 遍历当前目录下所有csv文件
for file_path in glob.glob("*.csv"):
    with open(file_path, 'r') as f:
        # 注意:示例文件用制表符分隔,若你的文件是逗号分隔,把delimiter改成','
        reader = csv.DictReader(f, delimiter='\t')
        for row in reader:
            category = row['Id'][0]  # 提取Id首字母作为类别标识
            current_value = float(row['Values'])
            # 若类别未记录,或当前值更大,则更新记录
            if category not in max_records or current_value > max_records[category]['value']:
                max_records[category] = {
                    'id': row['Id'],
                    'value': current_value
                }

# 打印最终结果
print("Id  Values")
for category in sorted(max_records.keys()):
    print(f"{max_records[category]['id']}  {max_records[category]['value']}")

小提示:如果需要把结果写入新文件,只需把最后打印的部分改成写入CSV的逻辑即可。

方法2:使用awk命令行工具(适合快速批量处理的场景)

如果你熟悉Linux/Unix命令行,用awk可以不用写完整脚本,直接终端执行完成任务:

awk '
    BEGIN { print "Id  Values" }
    NR == 1 { next }  # 跳过所有文件的表头
    {
        category = substr($1, 1, 1)  # 提取Id首字母作为类别
        current_val = $2 + 0  # 转换为数值类型,避免字符串比较误差
        # 更新对应类别的最大值记录
        if (!(category in max_val) || current_val > max_val[category]) {
            max_val[category] = current_val
            max_id[category] = $1
        }
    }
    END {
        # 按A/B/C/D顺序输出结果
        for (cat in max_id) {
            print max_id[cat] "  " max_val[cat]
        }
    }
' *.csv | sort -k1.1,1.1

使用说明:直接在终端运行这条命令,会自动处理当前目录下所有CSV文件,sort -k1.1,1.1用来保证输出按A、B、C、D的顺序排列。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 10:37:51