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

PowerShell脚本实现按hour分组统计count最大值

解决PowerShell按hour分组取count最大值的问题

我明白你遇到的问题了——直接用Measure-Object只会算出整个数据集的全局最值,没法按hour分组统计。咱们得把Group-Object和Measure-Object结合起来用,才能得到每个hour对应的count最大值。

方法一:输出CSV格式结果(保留结构)

这个脚本会先分组,再统计每组最大值,最后输出和你预期一致的纯数据行:

Import-Csv d:\test\serviceyrs.csv | 
    # 按hour列分组,把相同hour的行归为一组
    Group-Object -Property hour | 
    # 遍历每个分组
    ForEach-Object {
        # 计算当前分组里count列的最大值
        $maxCount = ($_.Group | Measure-Object -Property count -Maximum).Maximum
        # 构建包含hour和对应最大count的自定义对象
        [PSCustomObject]@{
            hour = $_.Name
            count = $maxCount
        }
    } | 
    # 转成CSV格式,去掉默认的类型信息行
    ConvertTo-Csv -NoTypeInformation | 
    # 跳过CSV表头,只输出数据行
    Select-Object -Skip 1

方法二:直接输出字符串格式(和你示例完全匹配)

如果不需要CSV结构,只想直接得到00,34;01,45;02,50这种格式的输出,可以用更简洁的写法:

Import-Csv d:\test\serviceyrs.csv | 
    Group-Object hour | 
    ForEach-Object {
        $maxCount = ($_.Group | Measure-Object count -Maximum).Maximum
        # 直接拼接成你要的字符串格式
        "$($_.Name),$maxCount"
    }

执行后会逐行输出每个hour的最大count,要是想把结果用分号连起来,可以在最后加个-join ';':

(Import-Csv d:\test\serviceyrs.csv | 
    Group-Object hour | 
    ForEach-Object {
        $maxCount = ($_.Group | Measure-Object count -Maximum).Maximum
        "$($_.Name),$maxCount"
    }) -join ';'

这样就能直接得到00,34;01,45;02,50的结果啦。

为什么之前的命令不行?

你之前的Import-Csv d:\test\serviceyrs.csv | Measure-Object -Property count -Minimum -Maximum没有做分组操作,Measure-Object会直接对整个CSV的count列计算最值,所以只能得到全局的最大值,而不是每个hour分组后的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:55:54