Pandas: Как удалить список индексов уровня 2 в MultiIndex DataFrame - PullRequest
2 голосов
/ 29 апреля 2020

У меня есть Pandas фрейм данных в следующей форме:

Визуализация фрейма данных

Что я хотел бы сделать для каждого индекса уровня 1 (2000, ..., 2020), удалите индексы уровня 2, содержащиеся в списке, «неактивные станции», эффективно удаляя строки, связанные с индексами, из набора данных.

Мой код для этого следующий:

#getting list of level 1 one values without duplicates
level_1_values = list(dict.fromkeys(ds2.index.get_level_values(0).tolist()))

#removing all level 2 indices in inactive_stations 
for value in level_1_values:
    #getting Level 2 indices for each Level 1 index
    station_list = ds2.loc[[value]].index.get_level_values(1).tolist()
    #calculating list of indices to be removed, 'inactive_sessions'
    inactive_stations = set(station_list).difference(set(active_stations))
    #dropping rows associated to inactive stations
    ds2.index.set_levels(ds2.loc[[value]].index.levels[1].drop(inactive_stations), level=1)
    

Я получаю следующую ошибку:

ValueError: На уровне 1 код max (33721)> = длина уровня (22196). ПРИМЕЧАНИЕ: этот индекс находится в несогласованном состоянии

...