does this work for you ?
w_params = ['t2m', 't2m', 't2m', 'd2m', 'tp']
operation = ['max', 'min', 'mean', 'mean', 'sum']
common_cols = ['name', 'parent', 'parent_name']
def agg_df(df, common_cols, w_params, operation):
# get list of col methods
cols = pd.DataFrame(zip(w_params, operation), columns=["col","method"]).groupby("col").agg(list).reset_index()
# create agg_dict and add common_cols methods
aggs = pd.concat([cols,pd.DataFrame(zip(common_cols,len(common_cols)*[["first"]]), columns=["col","method"])], ignore_index=True)
# aggregation with created dict
result_df = df.groupby(['date', 'region_id']).agg(aggs.set_index("col").method).sort_values(['region_id', 'date'], ascending=[True, True]).reset_index()
# and rename columns have multiindex
have_multi_method_cols = aggs[aggs.method.apply(len) > 1].col.tolist()
result_df.columns = result_df.columns.map(lambda x: x[0] if x[0] not in have_multi_method_cols else "_".join(x))
# return df
return result_df
agg_df(data, common_cols, w_params, operation)