report.grouped_distributions(pbmc3k, ref_obs='Cell type', columns_obs=['CD4 T', 'B', 'CD8 T', 'NK', 'Mono', 'DC', 'Platelet'],
scale_medians='column-wise', cmap='Reds')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[18], line 1
----> 1 report.grouped_distributions(pbmc3k, ref_obs='Cell type', columns_obs=['CD4 T', 'B', 'CD8 T', 'NK', 'Mono', 'DC', 'Platelet'],
2 scale_medians='column-wise', cmap='Reds')
File ~/miniconda3/envs/CIA_pip/lib/python3.12/site-packages/cia/report.py:88, in grouped_distributions(data, columns_obs, ref_obs, cmap, scale_medians, save)
60 def grouped_distributions(data, columns_obs, ref_obs, cmap='Reds', scale_medians=None, save=None):
61 """
62 Plots a heatmap of median values for selected columns in AnnData.obs across cell groups and performs statistical tests
63 to evaluate the differences in distributions. The Wilcoxon test checks if each group's signature score is significantly
(...)
85 If `save` is provided, the heatmap is saved and None is returned. Otherwise, returns the AxesSubplot object.
86 """
---> 88 grouped_df=data.obs.groupby(ref_obs).median()
89 grouped_df=grouped_df[columns_obs]
90 if scale_medians!=None:
File ~/miniconda3/envs/CIA_pip/lib/python3.12/site-packages/pandas/core/groupby/groupby.py:2532, in GroupBy.median(self, numeric_only)
2459 @final
2460 def median(self, numeric_only: bool = False) -> NDFrameT:
2461 """
2462 Compute median of groups, excluding missing values.
2463
(...)
2530 Freq: MS, dtype: float64
2531 """
-> 2532 result = self._cython_agg_general(
2533 "median",
2534 alt=lambda x: Series(x, copy=False).median(numeric_only=numeric_only),
2535 numeric_only=numeric_only,
2536 )
2537 return result.__finalize__(self.obj, method="groupby")
File ~/miniconda3/envs/CIA_pip/lib/python3.12/site-packages/pandas/core/groupby/groupby.py:1998, in GroupBy._cython_agg_general(self, how, alt, numeric_only, min_count, **kwargs)
1995 result = self._agg_py_fallback(how, values, ndim=data.ndim, alt=alt)
1996 return result
-> 1998 new_mgr = data.grouped_reduce(array_func)
1999 res = self._wrap_agged_manager(new_mgr)
2000 if how in ["idxmin", "idxmax"]:
File ~/miniconda3/envs/CIA_pip/lib/python3.12/site-packages/pandas/core/internals/managers.py:1472, in BlockManager.grouped_reduce(self, func)
1470 result_blocks = extend_blocks(applied, result_blocks)
1471 else:
-> 1472 applied = blk.apply(func)
1473 result_blocks = extend_blocks(applied, result_blocks)
1475 if len(result_blocks) == 0:
File ~/miniconda3/envs/CIA_pip/lib/python3.12/site-packages/pandas/core/internals/blocks.py:393, in Block.apply(self, func, **kwargs)
387 @final
388 def apply(self, func, **kwargs) -> list[Block]:
389 """
390 apply the function to my values; return a block if we are not
391 one
392 """
--> 393 result = func(self.values, **kwargs)
395 result = maybe_coerce_values(result)
396 return self._split_op_result(result)
File ~/miniconda3/envs/CIA_pip/lib/python3.12/site-packages/pandas/core/groupby/groupby.py:1973, in GroupBy._cython_agg_general.<locals>.array_func(values)
1971 def array_func(values: ArrayLike) -> ArrayLike:
1972 try:
-> 1973 result = self._grouper._cython_operation(
1974 "aggregate",
1975 values,
1976 how,
1977 axis=data.ndim - 1,
1978 min_count=min_count,
1979 **kwargs,
1980 )
1981 except NotImplementedError:
1982 # generally if we have numeric_only=False
1983 # and non-applicable functions
1984 # try to python agg
1985 # TODO: shouldn't min_count matter?
1986 # TODO: avoid special casing SparseArray here
1987 if how in ["any", "all"] and isinstance(values, SparseArray):
File ~/miniconda3/envs/CIA_pip/lib/python3.12/site-packages/pandas/core/groupby/ops.py:831, in BaseGrouper._cython_operation(self, kind, values, how, axis, min_count, **kwargs)
829 ids, _, _ = self.group_info
830 ngroups = self.ngroups
--> 831 return cy_op.cython_operation(
832 values=values,
833 axis=axis,
834 min_count=min_count,
835 comp_ids=ids,
836 ngroups=ngroups,
837 **kwargs,
838 )
File ~/miniconda3/envs/CIA_pip/lib/python3.12/site-packages/pandas/core/groupby/ops.py:541, in WrappedCythonOp.cython_operation(self, values, axis, min_count, comp_ids, ngroups, **kwargs)
537 self._validate_axis(axis, values)
539 if not isinstance(values, np.ndarray):
540 # i.e. ExtensionArray
--> 541 return values._groupby_op(
542 how=self.how,
543 has_dropped_na=self.has_dropped_na,
544 min_count=min_count,
545 ngroups=ngroups,
546 ids=comp_ids,
547 **kwargs,
548 )
550 return self._cython_op_ndim_compat(
551 values,
552 min_count=min_count,
(...)
556 **kwargs,
557 )
File ~/miniconda3/envs/CIA_pip/lib/python3.12/site-packages/pandas/core/arrays/categorical.py:2740, in Categorical._groupby_op(self, how, has_dropped_na, min_count, ngroups, ids, **kwargs)
2738 if kind == "transform":
2739 raise TypeError(f"{dtype} type does not support {how} operations")
-> 2740 raise TypeError(f"{dtype} dtype does not support aggregation '{how}'")
2742 result_mask = None
2743 mask = self.isna()
TypeError: category dtype does not support aggregation 'median'
generate the following error: