BUG: Preserve categorical dtypes in MultiIndex levels (#13743) by pijucha · Pull Request #13854 · pandas-dev/pandas (original) (raw)

Other places where a categorical dtype is lost in similar circumstances.

cidx = pd.CategoricalIndex(['y', 'x'], categories=list("xyz"), ordered=True) cidx_nonunique = pd.CategoricalIndex(['y', 'x', 'y'], categories=list("xyz"), ordered=True)

  1. concat
    df = pd.DataFrame([[10, 11, 12]])
    pd.concat([df, df], keys=cidx).index.levels[0]
    Out[32]: Index(['y', 'x'], dtype='object')
  2. stack with a non-unique index/multi-index:
    df = pd.DataFrame([[10, 11, 12]], columns=cidx_nonunique)
    df.stack().index.levels[1]
    Out[35]: Index(['x', 'y', 'z'], dtype='object')
  3. get_dummies
    pd.get_dummies(cidx).columns
    Out[36]: Index(['x', 'y', 'z'], dtype='object')
  4. make_axis_dummies with transform
    df = pd.DataFrame([[10, 11]], columns=cidx)
    ldf = pd.Panel({'A': df, 'B': df}).to_frame()
    pd.core.reshape.make_axis_dummies(panel.to_frame(), transform=lambda x: x).columns
    Out[53]: Index(['x', 'y', 'z'], dtype='object')
  5. panel_index
    pi = pd.core.panel.panel_index([0, 1, 2], cidx)
    pi.levels[1]
    Out[57]: Index(['x', 'y'], dtype='object', name='panel')
  6. pytables: LegacyTable.read()
    No quick example yet.