У меня есть мультииндексированный DataFrame с тремя уровнями индексов. Я хотел бы расширить свой третий уровень, чтобы он содержал все значения в данном диапазоне, но только для существующих значений в двух верхних уровнях.
Например, предположим, что первый уровень - это имя, второй уровень - дата, а третий уровень - час. Я хотел бы иметь строки для всех 24 возможных часов (даже если некоторые в настоящее время отсутствуют), но только для уже существующих имен и дат. Значения в новых строках могут быть заполнены нулями.
Таким образом, простой пример ввода будет:
>>> import pandas as pd
>>> df = pd.DataFrame([[1,1,1,3],[2,2,1,4], [3,3,2,5]], columns=['A', 'B', 'C','val'])
>>> df.set_index(['A', 'B', 'C'], inplace=True)
>>> df
val
A B C
1 1 1 3
2 2 1 4
3 3 2 5
если требуемые значения для C равны [1,2,3], желаемый результат будет:
val
A B C
1 1 1 3
2 0
3 0
2 2 1 4
2 0
3 0
3 3 1 0
2 5
3 0
Я знаю, как этого добиться, используя groupby и применяя определенную функцию для каждой группы, но мне было интересно, есть ли более чистый способ сделать это с reindex (я не мог заставить one работать для случая MultiIndex, но, возможно, я что-то упустил)