# Calculate partition columns with multiply /divide

**URL:** <https://discourse.julialang.org/t/calculate-partition-columns-with-multiply-divide/104436>\
**Category:** General Usage\
**Created:** [September 30, 2023, 5:11pm UTC](https://discourse.julialang.org/t/calculate-partition-columns-with-multiply-divide/104436 "2023-09-30T17:11:39Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![edas](https://avatars.discourse-cdn.com/v4/letter/e/958977/32.png) [@edas](https://discourse.julialang.org/u/edas)\
**Post date:** [September 30, 2023, 5:11pm UTC](https://discourse.julialang.org/t/calculate-partition-columns-with-multiply-divide/104436/1 "2023-09-30T17:11:39Z")

</div>

Hi,  
I want to partition dataframe and then combine to find multiples or divisions of columns in partition.

My example such: to calculate area sums (column square), price sums and get price per square.  
I was unable to do this using combine despite combine would be preferred method.  
Get some success in more complicated way, but can not calculate number of rows.  
Any solutions ?

Thanks,  
Edvard

```julia
# Sample DataFrame
df = DataFrame(
    Size = ["A", "B", "A", "B"],
    Price = [1000000, 2000000, 3000000, 4000000],
    Square = [100, 200, 150, 250]
)

# Group by "Size"
partitions_by_size = groupby(df, :Size)

# Define a custom function to calculate PriceM2 within a partition
function calculate_priceM2(partition)
    return sum(partition.Price) / sum(partition.Square)
end

# Calculate "Kaina_sum_mln" and "KainaM2" within each partition using the custom function

data_by_size = DataFrame(
    Size = unique(df.Size),
 # nrow = nrow(partitions_by_size),
 # nrow => count,
    Price_sum_mln = combine(partitions_by_size, :Price => (price -> sum(price) / 1000000)),
    PriceM2 = [calculate_priceM2(partition) for partition in partitions_by_size]
)

```

---

<div class="post-metadata">

**Author:** ![rocco\_sprmnt21](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rocco_sprmnt21/32/20127_2.png) [@rocco\_sprmnt21](https://discourse.julialang.org/u/rocco_sprmnt21)\
**Post date:** [September 30, 2023, 8:40pm UTC](https://discourse.julialang.org/t/calculate-partition-columns-with-multiply-divide/104436/2 "2023-09-30T20:40:48Z")

</div>

try this

```julia
pbs = groupby(df, :Size)

transform(combine(pbs,[2,3].=>sum), [2,3]=>ByRow(/))

```

or this

```julia

combine(pbs,[2,3]=>(x,y)->sum(x)/sum(y))

```

---

<div class="post-metadata">

**Author:** ![edas](https://avatars.discourse-cdn.com/v4/letter/e/958977/32.png) [@edas](https://discourse.julialang.org/u/edas)\
**Post date:** [October 1, 2023, 7:22am UTC](https://discourse.julialang.org/t/calculate-partition-columns-with-multiply-divide/104436/3 "2023-10-01T07:22:15Z")

</div>

Hi, rocco\_sprmnt21,

I tried both solutions and both works 🙂

I think as will use

```julia
combine(pbs,[2,3]=>(x,y)->sum(x)/sum(y))

```

as its syntax more clear for me.

Thanks for advice !

Edvard

---

<div class="post-metadata">

**Author:** ![rocco\_sprmnt21](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rocco_sprmnt21/32/20127_2.png) [@rocco\_sprmnt21](https://discourse.julialang.org/u/rocco_sprmnt21)\
**Post date:** [October 1, 2023, 12:31pm UTC](https://discourse.julialang.org/t/calculate-partition-columns-with-multiply-divide/104436/4 "2023-10-01T12:31:25Z")

</div>

I’m glad it was useful to you.  
This is a different solution along the lines of the one you were looking for

```julia
pbs = groupby(df, :Size)
pfsm(p,sm)=sum(p)/sum(sm)
combine(pbs,[2,3]=>pfsm=>:price_for_sm)

```
