Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Python Pandas - Lấy vị trí và index con cho level trong MultiIndex (không bỏ level)

Để lấy vị trí (slice) và index con cho một nhãn/level trong MultiIndex mà không bỏ level đó, dùng MultiIndex.get_loc_level(key, drop_level=False).

Các bước thực hiện

1. Import thư viện

import pandas as pd

2. Tạo MultiIndex

multiIndex = pd.MultiIndex.from_arrays(
    [list('pqrrss'), list('strvwx')],
    names=['One', 'Two']
)

3. Hiển thị MultiIndex

print("MultiIndex...\n", multiIndex)

4. Lấy vị trí và index con cho nhãn 'r' (level 0), không bỏ level

print("\nVị trí và index con (không bỏ level)...\n",
      multiIndex.get_loc_level('r', drop_level=False))

Ví dụ hoàn chỉnh

import pandas as pd

multiIndex = pd.MultiIndex.from_arrays(
    [list('pqrrss'), list('strvwx')],
    names=['One', 'Two']
)

print("MultiIndex...\n", multiIndex)
print("\nCác level trong MultiIndex...\n", multiIndex.levels)
print("\nVị trí và index con cho 'r' (không bỏ level)...\n",
      multiIndex.get_loc_level('r', drop_level=False))

Kết quả đầu ra

MultiIndex...
MultiIndex([('p', 's'), ('q', 't'), ('r', 'r'), ('r', 'v'), ('s', 'w'), ('s', 'x')],
           names=['One', 'Two'])

Các level trong MultiIndex...
[['p', 'q', 'r', 's'], ['r', 's', 't', 'v', 'w', 'x']]

Vị trí và index con cho 'r' (không bỏ level)...
(slice(2, 4, None), MultiIndex([('r', 'r'), ('r', 'v')], names=['One', 'Two']))

Giải thích kết quả

Trả về tuple (slice, sub_index):

  • slice(2, 4, None): Các hàng từ index 2 đến 3 (không bao gồm 4) - vị trí của 'r' trong level 0
  • MultiIndex([('r', 'r'), ('r', 'v')], names=['One', 'Two']): MultiIndex con chứa đầy đủ 2 level, chỉ các hàng khớp 'r' ở level 0

Tham số drop_level

Ví dụ drop_level=True cho 'r' level 0:

>>> multiIndex.get_loc_level('r', drop_level=True)
(slice(2, 4, None), Index(['r', 'v'], dtype='object', name='Two'))

Ứng dụng

  • Lọc DataFrame: df.loc[multiIndex.get_loc_level('r', drop_level=False)[0]]
  • Cross-section (xs): df.xs('r', level='One', drop_level=False)
  • Phân tích dữ liệu phân tầng theo level
drop_levelKết quả sub_index
False (mặc định)Giữ nguyên tất cả level → MultiIndex
TrueBỏ level đã khớp → Index đơn giản (chỉ level còn lại)