Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Group array objects by properties and sum

Tags:

powershell

I am working on getting some data out of CSV file with a script and have no idea to solve the most important part - I have an array with few hundred lines, there are about 50 Ids in those lines, and each Id has a few different services attached to it. Each line has a price attached.

I want to group lines by ID and Service and I want each of those groups in some sort of variable so I can sum the prices. I filter out unique IDs and Services earlier in a script because they are different all the time.

Some example data:

$data = @(
    [PSCustomObject]@{ Id='1'; Service='Service1'; Propertyx=1; Price='5' }
    [PSCustomObject]@{ Id='1'; Service='Service2'; Propertyx=1; Price='4' }
    [PSCustomObject]@{ Id='2'; Service='Service1'; Propertyx=1; Price='17' }
    [PSCustomObject]@{ Id='3'; Service='Service1'; Propertyx=1; Price='3' }
    [PSCustomObject]@{ Id='2'; Service='Service2'; Propertyx=1; Price='11' }
    [PSCustomObject]@{ Id='4'; Service='Service1'; Propertyx=1; Price='7' }
    [PSCustomObject]@{ Id='2'; Service='Service3'; Propertyx=1; Price='5' }
    [PSCustomObject]@{ Id='3'; Service='Service2'; Propertyx=1; Price='4' }
    [PSCustomObject]@{ Id='4'; Service='Service2'; Propertyx=1; Price='12' }
    [PSCustomObject]@{ Id='1'; Service='Service3'; Propertyx=1; Price='8' }
)  

$ident = $data.Id | select -unique | sort
$Serv = $data.Service | select -unique | sort

All help will be appreciated!

like image 995
Miha Žitko Avatar asked Feb 01 '26 09:02

Miha Žitko


1 Answers

Use Group-Object to group objects by common values across one or more properties.

For example, to calculate the sum per Id, do:

$data |Group-Object Id |ForEach-Object {
  [pscustomobject]@{
    Id  = $_.Name
    Sum = $_.Group |Measure-Object Price -Sum |ForEach-Object Sum
  }
}

Which should yield output like:

Id Sum
-- ---
1   17
2   33
3    7
4   19
like image 145
Mathias R. Jessen Avatar answered Feb 04 '26 00:02

Mathias R. Jessen



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!