Skip to content Skip to sidebar Skip to footer

Passing Parameters In Groupby Aggregate Function

I have dataframe which I've referenced as df in the code and I'm applying aggregate functions on multiple columns of each group. I also applied user-defined lambda functions f4, f5

Solution 1:

It is possible, but not easy, solution by neilaronson.

Also solution is simplify by sum of True values of boolean mask.

deff4(p):
    defipf(x):
        return (x < p).sum()
        #your solution#return len(x[x < p])
    ipf.__name__ = 'Frequency'return ipf 

d = {'acceleration':['mean', 'median', 'min'], 
 'velocity':[f4(3.4), 'sum' ,'count', 'median', 'min'], 
 'velocity_rate':f4(0.2),
 'acc_rate':f4(.25),
 'bearing':['sum', f4(10)], 
 'bearing_rate':'sum',     
 'Vincenty_distance':'sum'}

df1 = df.groupby(['userid','trip_id','Transportation_Mode','segmentid'], sort=False).agg(d)

#flatenning MultiIndex in columns
df1.columns = df1.columns.map('_'.join)
#MultiIndex in index to columns
df1 = df1.reset_index(level=2, drop=False).reset_index()

EDIT: You can also pass parameter for greater or less:

deff4(p, op):
    defipf(x):
        if op == 'greater':
            return (x > p).sum()
        elif op == 'less':
            return (x < p).sum()  
        else:
            raise ValueError("second argument has to be greater or less only")
    ipf.__name__ = 'Frequency'return ipf 



d = {'acceleration':['mean', 'median', 'min'], 
 'velocity':[f4(3.4, 'less'), 'sum' ,'count', 'median', 'min'], 
 'velocity_rate':f4(0.2, 'greater'),
 'acc_rate':f4(.25, 'greater'),
 'bearing':['sum', f4(10, 'greater')], 
 'bearing_rate':'sum',     
 'Vincenty_distance':'sum'}

df1 = df.groupby(['userid','trip_id','Transportation_Mode','segmentid'], sort=False).agg(d)

#flatenning MultiIndex in columns
df1.columns = df1.columns.map('_'.join)
#MultiIndex in index to columns
df1 = df1.reset_index(level=2, drop=False).reset_index()

print(df1.head())useridtrip_idsegmentidTransportation_Modeacceleration_mean\01411.01walk0.06108311412.01walk0.10914821413.01walk0.10677131414.01walk0.14118041415.01walk1.147157acceleration_medianacceleration_minvelocity_Frequencyvelocity_sum\0-1.168583e-02-2.9944281000.0   1506.67950611.665535e-09-3.234188464.0712.4290052-3.055414e-08-3.131293996.01394.74607139.241707e-09-3.307262340.0513.4612594-2.609489e-02-3.190424493.0729.702854velocity_countvelocity_medianvelocity_minvelocity_rate_Frequency\01028         1.2946570.284747288.014861.1896500.284725134.021020         1.2414190.284733301.033521.3263240.33959093.045041.2478680.284740168.0acc_rate_Frequencybearing_sumbearing_Frequencybearing_rate_sum\0169.081604.187066884.0-371.276356189.025559.589869313.0-357.8699442203.0-71540.14119957.0946.382581378.09548.920765              167.0-943.184805493.0-24021.55578467.0535.333624Vincenty_distance_sum01506.6795061712.42900521395.3287683513.4612594731.823664

Post a Comment for "Passing Parameters In Groupby Aggregate Function"