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"