У меня есть Dataframe с пандами мультииндексным:Как вы обновляете уровни pandas MultiIndex после разрезания его DataFrame?
In [1]: import pandas as pd
In [2]: multi_index = pd.MultiIndex.from_product([['CAN','USA'],['total']],names=['country','sex'])
In [3]: df = pd.DataFrame({'pop':[35,318]},index=multi_index)
In [4]: df
Out[4]:
pop
country sex
CAN total 35
USA total 318
Тогда я удалить некоторые строки из этой DataFrame:
In [5]: df = df.query('pop > 100')
In [6]: df
Out[6]:
pop
country sex
USA total 318
Но когда я советуюсь с MutliIndex, она до сих пор обе страны в своих уровнях.
In [7]: df.index.levels[0]
Out[7]: Index([u'CAN', u'USA'], dtype='object')
я могу это исправить себя довольно странным образом:
In [8]: idx_names = df.index.names
In [9]: df = df.reset_index(drop=False)
In [10]: df = df.set_index(idx_names)
In [11]: df
Out[11]:
pop
country sex
USA total 318
In [12]: df.index.levels[0]
Out[12]: Index([u'USA'], dtype='object')
Но это кажется довольно грязно. Есть ли лучший способ, который мне не хватает?
Oh , и вы можете добавить .unique() к этому, если вы не хотите повторений. Значения уровня по умолчанию включают каждое событие, поэтому вы увидите много дубликатов в типичном сценарии с несколькими индексами. –
Вы также можете использовать 'unique (data.index.values)' для получения значений на всех уровнях. – user2699