grps = pd.cut(randint(1, 5, n_rows), arange(1, 5))
f = lambda x: dgs[x.index].mean()
g = lambda x: x.groupby(x).apply(f)
h = lambda x: x.apply(g, axis=1).mean(axis=0)
print(d.groupby(grps).apply(h))

def group_process(df2):
    s = df2.stack()
v = np.repeat(dgs[(None), :df2.shape[1]], df2.shape[0], axis=0).ravel()
return pd.Series(v).groupby([s.index.get_level_values(0), s.values]).mean(
    ).mean(level=1)
print(d.groupby(grps).apply(group_process))
Жажда скорости: медленная вложенная группа и применение в Pandas