# -*- coding: utf-8 -*- import numpy as np import pandas as pd def make_grid_median_rest(df, grid_variables, grid_size, q_bottom_quantile, q_top_quantile): try: assert q_bottom_quantile <= q_top_quantile except AssertionError: raise AssertionError("The ratio of the bottom quantile is higher than the ratio of the top quantile.") medians = df.median() medians_df = pd.DataFrame({var: [medians[var]] for var in medians.index}) output_df = pd.concat([medians_df] * (grid_size ** len(grid_variables))).reset_index() output_df.drop(columns=["index"], inplace=True) ranges = [] for var in grid_variables: bottom_quantile = df[var].quantile(q_bottom_quantile) top_quantile = df[var].quantile(q_top_quantile) ranges.append((var, np.linspace(bottom_quantile, top_quantile, num=grid_size))) g = (np.meshgrid(*(ranges[i][1] for i in range(len(ranges))))) grid = np.vstack(map(np.ravel, g)) for i in range(len(ranges)): output_df[ranges[i][0]] = grid[i] return output_df, medians_df