Это происходит потому, что _cython_agg_blocks
вызывает _try_coerce_and_cast_result
, который вызывает _try_cast_result
, который пытается вернуть результат того же типа dtype , что и исходные значения (в данном случае bool
).
Это возвращает что-то немного своеобразное, когда Z
имеет dtype bool (и все группы имеют не более одного значения True). Если какая-либо из групп имеет 2 или более Истинных значения, то результирующими значениями являются float, так как _try_cast_result
не возвращает 2.0 обратно в логическое.
_try_cast_result
делает что-то более полезное, когда Z
имеет dtype int
: Внутри агрегатор Cython, используемый df.groupby(['X', 'Y']).sum()
, возвращает result
dtype float
. Здесь _try_cast_result
возвращает результат в dtype int
.