如何合并指定列重复项并提取其他列的最小/最大值?
解决方案
方法一:使用awk命令行工具(高效处理大文本)
awk是处理结构化文本的利器,适合快速处理数千条数据:
awk '{ key = $3 if (!min[key] || $1 < min[key]) min[key] = $1 if (!max[key] || $2 > max[key]) max[key] = $2 } END { for (k in min) printf "%s\t%s\t%s\n", min[k], max[k], k }' input.txt > output.txt
说明:
key = $3:以第三列的值作为分组标识- 遍历每一行时,更新对应分组的第一列最小值(
min[key])和第二列最大值(max[key]) END块在所有行处理完成后,遍历所有分组,输出结果- 将
input.txt替换为你的源文件名,output.txt是处理后的结果文件
方法二:使用Python脚本(灵活易扩展)
如果需要更定制化的处理,或者不熟悉命令行,可以用Python脚本:
from collections import defaultdict # 初始化存储结构,默认每个分组的min为无穷大,max为负无穷大 group_data = defaultdict(lambda: {"min_val": float("inf"), "max_val": -float("inf")}) # 读取源文件 with open("input.txt", "r") as infile: for line in infile: stripped_line = line.strip() if not stripped_line: continue # 分割行内容为三列 parts = stripped_line.split() if len(parts) != 3: continue val1 = float(parts[0]) val2 = float(parts[1]) group_key = parts[2] # 更新当前分组的最小值和最大值 if val1 < group_data[group_key]["min_val"]: group_data[group_key]["min_val"] = val1 if val2 > group_data[group_key]["max_val"]: group_data[group_key]["max_val"] = val2 # 写入结果文件 with open("output.txt", "w") as outfile: for key in group_data: # 保留两位小数,匹配原文件格式 outfile.write(f"{group_data[key]['min_val']:.2f}\t{group_data[key]['max_val']:.2f}\t{key}\n")
说明:
- 使用
defaultdict自动管理每个分组的最小/最大值 - 处理每行时跳过空行和格式异常的行
- 输出时保留两位小数,和原数据格式一致
内容的提问来源于stack exchange,提问作者akainth
相关产品推荐
相关产品推荐

