RGRGRG
RGRGRG

Reputation: 1079

Group by and apply custom function in pandas data frame

I have a df as below:

enter image description here

I would like to group by id and flag and create a new column in the df which is the result of: [sum(value1)/sum(value2)] * 12. Therefore I will need the result to be:

enter image description here

I have created a function:

 `def calculation (value1, value2):

       result = (value1/value2) * 12

       return(result)`

Could you advise which is the best way to apply this function along with the grouping, in order to get the desired output? Many thanks

Upvotes: 3

Views: 5193

Answers (2)

Ranjith kumar
Ranjith kumar

Reputation: 152

The following code should work.

import pandas as pd
df = pd.DataFrame({"id" : [1,1,2,2],"flag":["A","B","B","A"],"value1":[520,200,400,410],"value2":[12,5,11,2]})
def calculation(value1, value2):
    result = (value1/value2) * 12
    return(result)
df.groupby(['id','flag']).apply(lambda x: calculation(x['value1'],x['value2'])).astype(int)

You just have to use the following for groupby and apply.

df.groupby(['id','flag']).apply(lambda x: calculation(x['value1'],x['value2'])).astype(int)

Upvotes: 4

Timothy Helton
Timothy Helton

Reputation: 357

Here's a solution using apply and a lambda function.

import pandas as pd

df = pd.DataFrame([
    [1, 'A', 520, 12],
    [1, 'B', 200, 5],
    [2, 'B', 400, 11],
    [2, 'A', 410, 2]],
    columns=['id', 'flag', 'value1', 'value2'])

df.groupby(['id', 'flag']).apply(lambda x: (12 * x['value1']) / x['value2'])

If you want to use the function calculation above then just call the apply method like this.

df.groupby(['id', 'flag']).apply(lambda x: calculation(x['value1'], x['value2']))

Upvotes: 3

Related Questions