Помните, всякий раз, когда вы хотите, чтобы определенный список индексировал / формировал ваши данные. Pivot , кросс-таблица , стек , unstack не являются надежными, поскольку они сильно зависят от входных данных. Например, если «M» никогда не отображается в какой-либо строке ввода, вы не увидите «M», независимо от того, как вы поворачиваете / разбрасываете свой результат. Проблема такого рода в том, где reindex () светит.
Предположим, что ваш предварительно обработанный кадр сохраняется как df :
mdx1 = pd.MultiIndex.from_product([df.index.levels[0], ['M', 'F']])
df.reindex(mdx1).fillna(0, downcast='infer')
С другой стороны, если вы хотите, чтобы все возможные значения уровня 1 отображались на всех уровнях 0, сделайте следующее:
mdx1 = pd.MultiIndex.from_product(df.index.levels)
df.reindex(mdx1).fillna(0, downcast='infer')
Это можно легко распространить на кадры данных с более чем двухуровневыми индексами.
Обновление: use Категориальный тип данных может решить проблемы, связанные с функциями, похожими на сводные.