looping over pandas aggregation in groupby

Question:

I’m looking for shortering the code where I don’t need to repeat multiple lambda functions. This code is working, want to optimize further. Any help would be appreciated.

for col in col_list:
        f = { col: [lambda x: x.quantile(0.01), lambda x: x.quantile(0.05), lambda x: x.quantile(0.10), lambda x: x.quantile(0.15),
                    lambda x: x.quantile(0.20), lambda x: x.quantile(0.25), lambda x: x.quantile(0.30), lambda x: x.quantile(0.35)
                   ]}
        grpby_df = df.groupby('grpbycol').agg(f)
Asked By: qqplot

||

Answers:

GroupBy.quantile exists and it accepts a list of quantile values, so we can do

(df.groupby("grpbycol")[col]
   .quantile([0.01, *np.arange(0.05, 0.40, 0.05)])
   .unstack())

where np.arange helps generate that sequence, and unstack at the end will move the quantile values to the columns part from a level of a multiindex.

Answered By: Mustafa Aydın
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.