если у вас есть списки в зависимости от агрегирования, вы можете сделать:
l_mean = ['col6','col3']
l_first = ['col4','col2']
df.groupby(['col1','col5']).agg({**{col:'mean' for col in l_mean},
**{col:'first' for col in l_first}})
нотация **{}
предназначена для распаковки словаря, выполняя {**{}, **{}}
создание одного словаря из 2 словарей (это может быть чем два), это как объединение словарей. И выполнение {col:'mean' for col in l_mean}
создает словарь с каждым col
списка в качестве ключа и 'mean'
в качестве значения, это понимание словаря.
Или используя concat
:
gr = df.groupby(['col1','col5'])
pd.concat([gr[l_mean].mean(),
gr[l_first].first()],
axis=1)
и reset_index
после, чтобы получить ожидаемый результат