stefan-jansen / alphalens-reloaded

Performance analysis of predictive (alpha) stock factors
https://alphalens.ml4trading.io
Apache License 2.0
304 stars 68 forks source link

TypeError: Cannot perform min with non-ordered Categorical #20

Closed Chaoyism closed 5 months ago

Chaoyism commented 10 months ago

Problem Description

Please provide a minimal, self-contained, and reproducible example: Hi! I cloned the project and tried running the overview.ipynb without any modification. Everything was fine except the summary tear sheet. When I ran:

`alphalens.tears.create_summary_tear_sheet(factor_data)`

The sheet cannot be generated, and I got the "TypeError: Cannot perform min with non-ordered Categorical".

Please provide the full traceback:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
[d:\alphalens-reloaded\docs\source\notebooks\overview.ipynb](file:///D:/alphalens-reloaded/docs/source/notebooks/overview.ipynb) 单元格 93 line 1
----> [1](vscode-notebook-cell:/d%3A/alphalens-reloaded/docs/source/notebooks/overview.ipynb#Y161sZmlsZQ%3D%3D?line=0) alphalens.tears.create_summary_tear_sheet(factor_data)

File [d:\Program](file:///D:/Program) Files\Python\Python39\lib\site-packages\alphalens\plotting.py:46, in customize.<locals>.call_w_context(*args, **kwargs)
     [44](file:///D:/Program%20Files/Python/Python39/lib/site-packages/alphalens/plotting.py:44)     with plotting_context(), axes_style(), color_palette:
     [45](file:///D:/Program%20Files/Python/Python39/lib/site-packages/alphalens/plotting.py:45)         sns.despine(left=True)
---> [46](file:///D:/Program%20Files/Python/Python39/lib/site-packages/alphalens/plotting.py:46)         return func(*args, **kwargs)
     [47](file:///D:/Program%20Files/Python/Python39/lib/site-packages/alphalens/plotting.py:47) else:
     [48](file:///D:/Program%20Files/Python/Python39/lib/site-packages/alphalens/plotting.py:48)     return func(*args, **kwargs)

File [d:\Program](file:///D:/Program) Files\Python\Python39\lib\site-packages\alphalens\tears.py:131, in create_summary_tear_sheet(factor_data, long_short, group_neutral)
    [128](file:///D:/Program%20Files/Python/Python39/lib/site-packages/alphalens/tears.py:128) vertical_sections = 2 + fr_cols * 3
    [129](file:///D:/Program%20Files/Python/Python39/lib/site-packages/alphalens/tears.py:129) gf = GridFigure(rows=vertical_sections, cols=1)
--> [131](file:///D:/Program%20Files/Python/Python39/lib/site-packages/alphalens/tears.py:131) plotting.plot_quantile_statistics_table(factor_data)
    [133](file:///D:/Program%20Files/Python/Python39/lib/site-packages/alphalens/tears.py:133) plotting.plot_returns_table(alpha_beta, mean_quant_rateret, mean_ret_spread_quant)
    [135](file:///D:/Program%20Files/Python/Python39/lib/site-packages/alphalens/tears.py:135) plotting.plot_quantile_returns_bar(
    [136](file:///D:/Program%20Files/Python/Python39/lib/site-packages/alphalens/tears.py:136)     mean_quant_rateret,
    [137](file:///D:/Program%20Files/Python/Python39/lib/site-packages/alphalens/tears.py:137)     by_group=False,
    [138](file:///D:/Program%20Files/Python/Python39/lib/site-packages/alphalens/tears.py:138)     ylim_percentiles=None,
    [139](file:///D:/Program%20Files/Python/Python39/lib/site-packages/alphalens/tears.py:139)     ax=gf.next_row(),
    [140](file:///D:/Program%20Files/Python/Python39/lib/site-packages/alphalens/tears.py:140) )

File [d:\Program](file:///D:/Program) Files\Python\Python39\lib\site-packages\alphalens\plotting.py:188, in plot_quantile_statistics_table(factor_data)
    [187](file:///D:/Program%20Files/Python/Python39/lib/site-packages/alphalens/plotting.py:187) def plot_quantile_statistics_table(factor_data):
--> [188](file:///D:/Program%20Files/Python/Python39/lib/site-packages/alphalens/plotting.py:188)     quantile_stats = factor_data.groupby("factor_quantile").agg(
    [189](file:///D:/Program%20Files/Python/Python39/lib/site-packages/alphalens/plotting.py:189)         ["min", "max", "mean", "std", "count"]
    [190](file:///D:/Program%20Files/Python/Python39/lib/site-packages/alphalens/plotting.py:190)     )["factor"]
    [191](file:///D:/Program%20Files/Python/Python39/lib/site-packages/alphalens/plotting.py:191)     quantile_stats["count %"] = (
    [192](file:///D:/Program%20Files/Python/Python39/lib/site-packages/alphalens/plotting.py:192)         quantile_stats["count"] / quantile_stats["count"].sum() * 100.0
    [193](file:///D:/Program%20Files/Python/Python39/lib/site-packages/alphalens/plotting.py:193)     )
    [195](file:///D:/Program%20Files/Python/Python39/lib/site-packages/alphalens/plotting.py:195)     print("Quantiles Statistics")

File [d:\Program](file:///D:/Program) Files\Python\Python39\lib\site-packages\pandas\core\groupby\generic.py:1269, in DataFrameGroupBy.aggregate(self, func, engine, engine_kwargs, *args, **kwargs)
   [1266](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/generic.py:1266) func = maybe_mangle_lambdas(func)
   [1268](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/generic.py:1268) op = GroupByApply(self, func, args, kwargs)
-> [1269](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/generic.py:1269) result = op.agg()
   [1270](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/generic.py:1270) if not is_dict_like(func) and result is not None:
   [1271](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/generic.py:1271)     return result

File [d:\Program](file:///D:/Program) Files\Python\Python39\lib\site-packages\pandas\core\apply.py:166, in Apply.agg(self)
    [163](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/apply.py:163)     return self.agg_dict_like()
    [164](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/apply.py:164) elif is_list_like(arg):
    [165](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/apply.py:165)     # we require a list, but not a 'str'
--> [166](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/apply.py:166)     return self.agg_list_like()
    [168](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/apply.py:168) if callable(arg):
    [169](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/apply.py:169)     f = com.get_cython_func(arg)

File [d:\Program](file:///D:/Program) Files\Python\Python39\lib\site-packages\pandas\core\apply.py:355, in Apply.agg_list_like(self)
    [351](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/apply.py:351)     new_res = colg.aggregate(
    [352](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/apply.py:352)         arg, self.axis, *self.args, **self.kwargs
    [353](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/apply.py:353)     )
    [354](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/apply.py:354) else:
--> [355](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/apply.py:355)     new_res = colg.aggregate(arg, *self.args, **self.kwargs)
    [356](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/apply.py:356) results.append(new_res)
    [357](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/apply.py:357) indices.append(index)

File [d:\Program](file:///D:/Program) Files\Python\Python39\lib\site-packages\pandas\core\groupby\generic.py:238, in SeriesGroupBy.aggregate(self, func, engine, engine_kwargs, *args, **kwargs)
    [234](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/generic.py:234) elif isinstance(func, abc.Iterable):
    [235](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/generic.py:235)     # Catch instances of lists / tuples
    [236](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/generic.py:236)     # but not the class list / tuple itself.
    [237](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/generic.py:237)     func = maybe_mangle_lambdas(func)
--> [238](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/generic.py:238)     ret = self._aggregate_multiple_funcs(func, *args, **kwargs)
    [239](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/generic.py:239)     if relabeling:
    [240](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/generic.py:240)         # columns is not narrowed by mypy from relabeling flag
    [241](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/generic.py:241)         assert columns is not None  # for mypy

File [d:\Program](file:///D:/Program) Files\Python\Python39\lib\site-packages\pandas\core\groupby\generic.py:316, in SeriesGroupBy._aggregate_multiple_funcs(self, arg, *args, **kwargs)
    [314](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/generic.py:314)     for idx, (name, func) in enumerate(arg):
    [315](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/generic.py:315)         key = base.OutputKey(label=name, position=idx)
--> [316](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/generic.py:316)         results[key] = self.aggregate(func, *args, **kwargs)
    [318](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/generic.py:318) if any(isinstance(x, DataFrame) for x in results.values()):
    [319](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/generic.py:319)     from pandas import concat

File [d:\Program](file:///D:/Program) Files\Python\Python39\lib\site-packages\pandas\core\groupby\generic.py:232, in SeriesGroupBy.aggregate(self, func, engine, engine_kwargs, *args, **kwargs)
    [229](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/generic.py:229)     kwargs = {}
    [231](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/generic.py:231) if isinstance(func, str):
--> [232](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/generic.py:232)     return getattr(self, func)(*args, **kwargs)
    [234](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/generic.py:234) elif isinstance(func, abc.Iterable):
    [235](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/generic.py:235)     # Catch instances of lists / tuples
    [236](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/generic.py:236)     # but not the class list / tuple itself.
    [237](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/generic.py:237)     func = maybe_mangle_lambdas(func)

File [d:\Program](file:///D:/Program) Files\Python\Python39\lib\site-packages\pandas\core\groupby\groupby.py:2293, in GroupBy.min(self, numeric_only, min_count, engine, engine_kwargs)
   [2291](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:2291)     return self._numba_agg_general(sliding_min_max, engine_kwargs, False)
   [2292](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:2292) else:
-> [2293](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:2293)     return self._agg_general(
   [2294](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:2294)         numeric_only=numeric_only,
   [2295](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:2295)         min_count=min_count,
   [2296](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:2296)         alias="min",
   [2297](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:2297)         npfunc=np.min,
   [2298](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:2298)     )

File [d:\Program](file:///D:/Program) Files\Python\Python39\lib\site-packages\pandas\core\groupby\groupby.py:1422, in GroupBy._agg_general(self, numeric_only, min_count, alias, npfunc)
   [1413](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1413) @final
   [1414](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1414) def _agg_general(
   [1415](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1415)     self,
   (...)
   [1420](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1420)     npfunc: Callable,
   [1421](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1421) ):
-> [1422](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1422)     result = self._cython_agg_general(
   [1423](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1423)         how=alias,
   [1424](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1424)         alt=npfunc,
   [1425](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1425)         numeric_only=numeric_only,
   [1426](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1426)         min_count=min_count,
   [1427](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1427)     )
   [1428](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1428)     return result.__finalize__(self.obj, method="groupby")

File [d:\Program](file:///D:/Program) Files\Python\Python39\lib\site-packages\pandas\core\groupby\groupby.py:1507, in GroupBy._cython_agg_general(self, how, alt, numeric_only, min_count, **kwargs)
   [1503](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1503)         result = self._agg_py_fallback(values, ndim=data.ndim, alt=alt)
   [1505](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1505)     return result
-> [1507](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1507) new_mgr = data.grouped_reduce(array_func)
   [1508](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1508) res = self._wrap_agged_manager(new_mgr)
   [1509](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1509) out = self._wrap_aggregated_output(res)

File [d:\Program](file:///D:/Program) Files\Python\Python39\lib\site-packages\pandas\core\internals\base.py:197, in SingleDataManager.grouped_reduce(self, func)
    [195](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/internals/base.py:195) def grouped_reduce(self, func):
    [196](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/internals/base.py:196)     arr = self.array
--> [197](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/internals/base.py:197)     res = func(arr)
    [198](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/internals/base.py:198)     index = default_index(len(res))
    [200](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/internals/base.py:200)     mgr = type(self).from_array(res, index)

File [d:\Program](file:///D:/Program) Files\Python\Python39\lib\site-packages\pandas\core\groupby\groupby.py:1490, in GroupBy._cython_agg_general.<locals>.array_func(values)
   [1488](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1488) def array_func(values: ArrayLike) -> ArrayLike:
   [1489](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1489)     try:
-> [1490](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1490)         result = self.grouper._cython_operation(
   [1491](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1491)             "aggregate",
   [1492](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1492)             values,
   [1493](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1493)             how,
   [1494](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1494)             axis=data.ndim - 1,
   [1495](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1495)             min_count=min_count,
   [1496](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1496)             **kwargs,
   [1497](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1497)         )
   [1498](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1498)     except NotImplementedError:
   [1499](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1499)         # generally if we have numeric_only=False
   [1500](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1500)         # and non-applicable functions
   [1501](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1501)         # try to python agg
   [1502](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1502)         # TODO: shouldn't min_count matter?
   [1503](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/groupby.py:1503)         result = self._agg_py_fallback(values, ndim=data.ndim, alt=alt)

File [d:\Program](file:///D:/Program) Files\Python\Python39\lib\site-packages\pandas\core\groupby\ops.py:959, in BaseGrouper._cython_operation(self, kind, values, how, axis, min_count, **kwargs)
    [957](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:957) ids, _, _ = self.group_info
    [958](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:958) ngroups = self.ngroups
--> [959](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:959) return cy_op.cython_operation(
    [960](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:960)     values=values,
    [961](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:961)     axis=axis,
    [962](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:962)     min_count=min_count,
    [963](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:963)     comp_ids=ids,
    [964](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:964)     ngroups=ngroups,
    [965](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:965)     **kwargs,
    [966](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:966) )

File [d:\Program](file:///D:/Program) Files\Python\Python39\lib\site-packages\pandas\core\groupby\ops.py:645, in WrappedCythonOp.cython_operation(self, values, axis, min_count, comp_ids, ngroups, **kwargs)
    [641](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:641) is_numeric = is_numeric_dtype(dtype)
    [643](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:643) # can we do this operation with our cython functions
    [644](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:644) # if not raise NotImplementedError
--> [645](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:645) self._disallow_invalid_ops(dtype, is_numeric)
    [647](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:647) if not isinstance(values, np.ndarray):
    [648](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:648)     # i.e. ExtensionArray
    [649](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:649)     return self._ea_wrap_cython_operation(
    [650](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:650)         values,
    [651](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:651)         min_count=min_count,
   (...)
    [654](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:654)         **kwargs,
    [655](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:655)     )

File [d:\Program](file:///D:/Program) Files\Python\Python39\lib\site-packages\pandas\core\groupby\ops.py:247, in WrappedCythonOp._disallow_invalid_ops(self, dtype, is_numeric)
    [242](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:242)     raise TypeError(f"{dtype} type does not support {how} operations")
    [243](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:243) if how in ["min", "max", "rank"] and not dtype.ordered:
    [244](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:244)     # raise TypeError instead of NotImplementedError to ensure we
    [245](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:245)     #  don't go down a group-by-group path, since in the empty-groups
    [246](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:246)     #  case that would fail to raise
--> [247](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:247)     raise TypeError(f"Cannot perform {how} with non-ordered Categorical")
    [248](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:248) if how not in ["rank"]:
    [249](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:249)     # only "rank" is implemented in cython
    [250](file:///D:/Program%20Files/Python/Python39/lib/site-packages/pandas/core/groupby/ops.py:250)     raise NotImplementedError(f"{dtype} dtype not supported")

TypeError: Cannot perform min with non-ordered Categorical

Please provide any additional information below:

Versions

Whole Pip List:

Package Version


alphalens-reloaded 0.4.3 appdirs 1.4.4 asttokens 2.4.0 backcall 0.2.0 beautifulsoup4 4.12.2 Bottleneck 1.3.7 Brotli 1.1.0 certifi 2023.7.22 charset-normalizer 3.3.0 colorama 0.4.6 comm 0.1.4 contourpy 1.1.1 cycler 0.12.1 debugpy 1.8.0 decorator 5.1.1 empyrical-reloaded 0.5.9 et-xmlfile 1.1.0 exceptiongroup 1.1.3 executing 2.0.0 fire 0.5.0 fonttools 4.43.1 frozendict 2.3.10 greenlet 3.0.0 html5lib 1.1 idna 3.4 importlib-metadata 6.8.0 importlib-resources 6.1.0 ipykernel 6.25.2 ipython 8.16.1 jedi 0.19.1 jupyter_client 8.3.0 jupyter_core 5.3.1 kiwisolver 1.4.5 lxml 4.9.3 matplotlib 3.7.2 matplotlib-inline 0.1.6 msgpack 1.0.7 multitasking 0.0.11 mysql-connector-python 8.1.0 nest-asyncio 1.5.8 numpy 1.25.2 openpyxl 3.1.2 orjson 3.9.9 packaging 23.2 pandas 2.0.3 pandas-datareader 0.10.0 parso 0.8.3 patsy 0.5.4 peewee 3.17.0 pickleshare 0.7.5 Pillow 10.1.0 pip 22.0.4 platformdirs 3.11.0 prompt-toolkit 3.0.39 protobuf 4.21.12 psutil 5.9.6 pure-eval 0.2.2 Pygments 2.16.1 PyMySQL 1.1.0 pyparsing 3.0.9 python-dateutil 2.8.2 python-rapidjson 1.12 pytz 2023.3.post1 pywin32 306 PyYAML 6.0.1 pyzmq 25.1.1 requests 2.31.0 rqdatac 2.11.8.3 scipy 1.11.4 seaborn 0.13.0 setuptools 58.1.0 six 1.16.0 soupsieve 2.5 SQLAlchemy 2.0.22 stack-data 0.6.3 statsmodels 0.14.0 termcolor 2.3.0 tornado 6.3.3 tqdm 4.66.1 traitlets 5.11.2 typing_extensions 4.8.0 tzdata 2023.3 urllib3 2.0.7 wcwidth 0.2.8 webencodings 0.5.1 win-inet-pton 1.1.0 xlrd 2.0.1 yfinance 0.2.32 zipp 3.17.0

lvshang3443 commented 8 months ago

这个问题还没有解决吗?

syesww commented 6 months ago

我也遇到这个问题,但是单个能输出应该不影响,有可能是版本的原因

stefan-jansen commented 5 months ago

Should have been addressed by #28.