Я взглянул на исходный код pandas и обнаружил, что, по крайней мере, при агрегировании серии pandas имя строковой функции «переводится» в функцию путем вызова
if isinstance(func, str):
return getattr(self, func)(*args, **kwargs)
где self
- это экземпляр SeriesGroupBy
, который является подклассом GroupBy
. Класс GroupBy
имеет ряд методов, которые можно использовать для агрегирования (включая count
, mean
, median
, и c.). С другой стороны, list
- это, конечно, не метод GroupBy
, а скорее встроенная функция Python, поэтому ее не удается найти при вызове getattr()
. Я предполагаю, что это также относится к DataFrameGroupBy
, поскольку он также является подклассом GroupBy
.
Аналогичным образом, .agg()
не сможет использовать любое определяемое пользователем имя функции, если оно предоставлено в виде строки.
Чтобы просмотреть список всех доступных строк, которые нужно передать в .agg()
, ознакомьтесь с этой статьей в pandas документации .