Python 基于其他列值从列获取最大值的脚本

Python 基于其他列值从列获取最大值的脚本,python,perl,bash,csv,max,Python,Perl,Bash,Csv,Max,我需要一个脚本来读取csv文件(orig.csv)并输出重新格式化的csv文件(format.csv) 原始csv文件如下所示: Time,Label,frame,slot,SSN,Board,BT,SRN,LabelFrame,SRNAME,LabelID,Integrity,MAX_val 2014-03-17,lableA,1,8,0,,SPUB,1,NNN,NNN,1,100%,60 2014-03-17,lableA,2,22,0,,GOUC,2,NNN02,NNN02,1,100%,

我需要一个脚本来读取csv文件(orig.csv)并输出重新格式化的csv文件(format.csv)

原始csv文件如下所示:

Time,Label,frame,slot,SSN,Board,BT,SRN,LabelFrame,SRNAME,LabelID,Integrity,MAX_val
2014-03-17,lableA,1,8,0,,SPUB,1,NNN,NNN,1,100%,60
2014-03-17,lableA,2,22,0,,GOUC,2,NNN02,NNN02,1,100%,
2014-03-17,lableB,2,8,0,,CCCB,2,NNN02,NNN02,1,100%,59
2014-03-17,lableB,1,2,4,,CCCB,1,NNN,NNN,1,100%,48
2014-03-17,lableB,1,0,6,,CCCB,1,NNN,NNN,1,100%,59
2014-03-17,lableC,2,6,0,,SCUA,2,NNN02,NNN02,1,100%,55
2014-03-17,lableD,2,4,1,,CCCB,2,NNN02,NNN02,1,100%,59
2014-03-17,lableD,0,2,7,,CCCB,0,MPS,MPS,1,100%,46
2014-03-17,lableD,1,4,3,,CCCA,1,NNN,NNN,1,100%,43
2014-03-17,lableE,2,2,7,,CCCB,2,NNN02,NNN02,1,100%,58
Time,Label,frame,slot,SSN,Board,BT,SRN,LabelFrame,SRNAME,LabelID,Integrity,MAX_val
2014-03-17,lableA,1,8,0,,CCCB,1,NNN,NNN,1,100%,60
2014-03-17,lableB,2,8,0,,CCCB,2,NNN02,NNN02,1,100%,59
2014-03-17,lableC,2,6,0,,SCUA,2,NNN02,NNN02,1,100%,55
2014-03-17,lableD,2,4,1,,CCCB,2,NNN02,NNN02,1,100%,59
2014-03-17,lableE,2,2,7,,CCCB,2,NNN02,NNN02,1,100%,58
重新格式化将遍历原始csv文件,并从第2列(标签)中获取所有唯一名称,以及第13列(最大值)中相应的最大值,请参见下面的示例。(例如,标签a-E值得关注,而对于标签b,[59,48,59]的最大值值得关注)我还希望尽可能满足动态orig.csv文件的需要

报告的csv文件如下所示:

Time,Label,frame,slot,SSN,Board,BT,SRN,LabelFrame,SRNAME,LabelID,Integrity,MAX_val
2014-03-17,lableA,1,8,0,,SPUB,1,NNN,NNN,1,100%,60
2014-03-17,lableA,2,22,0,,GOUC,2,NNN02,NNN02,1,100%,
2014-03-17,lableB,2,8,0,,CCCB,2,NNN02,NNN02,1,100%,59
2014-03-17,lableB,1,2,4,,CCCB,1,NNN,NNN,1,100%,48
2014-03-17,lableB,1,0,6,,CCCB,1,NNN,NNN,1,100%,59
2014-03-17,lableC,2,6,0,,SCUA,2,NNN02,NNN02,1,100%,55
2014-03-17,lableD,2,4,1,,CCCB,2,NNN02,NNN02,1,100%,59
2014-03-17,lableD,0,2,7,,CCCB,0,MPS,MPS,1,100%,46
2014-03-17,lableD,1,4,3,,CCCA,1,NNN,NNN,1,100%,43
2014-03-17,lableE,2,2,7,,CCCB,2,NNN02,NNN02,1,100%,58
Time,Label,frame,slot,SSN,Board,BT,SRN,LabelFrame,SRNAME,LabelID,Integrity,MAX_val
2014-03-17,lableA,1,8,0,,CCCB,1,NNN,NNN,1,100%,60
2014-03-17,lableB,2,8,0,,CCCB,2,NNN02,NNN02,1,100%,59
2014-03-17,lableC,2,6,0,,SCUA,2,NNN02,NNN02,1,100%,55
2014-03-17,lableD,2,4,1,,CCCB,2,NNN02,NNN02,1,100%,59
2014-03-17,lableE,2,2,7,,CCCB,2,NNN02,NNN02,1,100%,58
注意:我对脚本编写还不熟悉,所以不确定用哪种语言编写这篇文章最好,但我一直在考虑bash、shell、perl,但对其他语言是开放的

编辑::这就是我将如何拉入我的csv数据

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>D3: Loading data from a CSV file</title>
        <script type="text/javascript" src="d3/d3.v3.js"></script>
    </head>
    <body>
        <script type="text/javascript">

            d3.csv("XPU max load_format1(XPU load).csv", function(data) {
                console.log(data);
            });

        </script>
    </body>
</html>

D3:从CSV文件加载数据
d3.csv(“XPU最大负载\格式1(XPU负载).csv”),函数(数据){
控制台日志(数据);
});

这是解决您问题的Perl解决方案。它为在for
MAX\u val
中具有最高值的每个标签保留数据的哈希
%data
。它还在
@labels
中保留标签列表,以便在遇到新标签时跟踪它们,从而保持输出与输入的顺序相同

正如我在评论中所说,数据中有一行的第13列为空。我添加了代码,将其视为零,如果这是您的帖子中的错误,那么这是不必要的

use strict;
use warnings;

open my $orig_fh,   '<', 'orig.csv'   or die $!;
open my $format_fh, '>', 'format.csv' or die $!;

print $format_fh scalar <$orig_fh>; # Copy header line

my %data;
my @labels;

while (<$orig_fh>) {
  chomp;
  my @fields = split /,/, $_, -1;
  my ($label, $max_val) = @fields[1,12];
  if ( exists $data{$label} ) {
    my $prev_max_val = $data{$label}[12] || 0;
    $data{$label} = \@fields if $max_val and $max_val > $prev_max_val;
  }
  else {
    $data{$label} = \@fields;
    push @labels, $label;
  }
}

for my $label (@labels) {
  print $format_fh join(',', @{ $data{$label} }), "\n";
}

显示用于提取csv数据的代码。当多个记录共享同一col13最高值时会发生什么情况?第二个数据行(文件的第三行)的第13列为空。在这种情况下该怎么办?@Aaron编辑了我的Q来回答you@Kenosis例如,[59,59,58]那么59将是一个有趣的问题,但我只是在运行该脚本后才得到第一行。我已经根据您在问题中显示的数据对其进行了测试。“第一行”是指标题行吗?你在用什么计算机系统?文件是否来自不同的系统?试着把
打印出来chomp之后的code>语句看看它在读什么。是的,我指的是标题。使用cygwin的windows XP。我使用的是来自m问题的相同数据。我尝试了
打印
咀嚼之后并且不打印任何内容。tks in Advanced可能会为此提出另一个问题,但我怎样才能稍微更改它以处理多个名为“H_*.csv”的文件。TKSI多个文件的可能解决方案Q:和