Tôi có một Dataframe với gấu trúc MultiIndex:Làm thế nào để bạn cập nhật các cấp của một gấu trúc MultiIndex sau khi cắt DataFrame của nó?
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
Sau đó, tôi loại bỏ một số hàng từ DataFrame rằng:
In [5]: df = df.query('pop > 100')
In [6]: df
Out[6]:
pop
country sex
USA total 318
Nhưng khi tôi tham khảo MutliIndex, nó vẫn có cả hai quốc gia ở mức độ của nó.
In [7]: df.index.levels[0]
Out[7]: Index([u'CAN', u'USA'], dtype='object')
tôi có thể khắc phục điều này bản thân mình một cách khá lạ:
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')
Nhưng điều này có vẻ khá lộn xộn. Có cách nào tốt hơn tôi đang thiếu?
Oh và bạn có thể thêm .unique() vào đó nếu bạn không muốn lặp lại. Các giá trị mức mặc định bao gồm mỗi lần xảy ra, do đó bạn sẽ thấy nhiều bản sao trong một kịch bản nhiều chỉ mục điển hình –
Bạn cũng có thể sử dụng 'unique (data.index.values)' để nhận giá trị trên tất cả các cấp. – user2699