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

Python Pandas - Lấy giá trị level được yêu cầu trong MultiIndex

Để lấy vector giá trị cho level được chỉ định (bằng tên hoặc vị trí) trong MultiIndex, dùng MultiIndex.get_level_values(key).

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 và các level

print("MultiIndex...\n", multiIndex)
print("\nCác level trong MultiIndex...\n", multiIndex.levels)

4. Lấy giá trị level 0 và level 'Two'

print("\nGiá trị level 0...\n", multiIndex.get_level_values(0))
print("\nGiá trị level 'Two'...\n", multiIndex.get_level_values("Two"))

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("\nGiá trị level 0...\n", multiIndex.get_level_values(0))
print("\nGiá trị level 'Two'...\n", multiIndex.get_level_values("Two"))

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']]

Giá trị level 0...
Index(['p', 'q', 'r', 'r', 's', 's'], dtype='object', name='One')

Giá trị level 'Two'...
Index(['s', 't', 'r', 'v', 'w', 'x'], dtype='object', name='Two')

Tóm tắt

  • get_level_values(key) chấp nhận tên level (str) hoặc vị trí (int)
  • Trả về Index chứa tất cả giá trị của level đó theo thứ tự ban đầu (có trùng lặp)
  • Index kết quả giữ name của level
  • multiIndex.levels trả về giá trị duy nhất đã sắp xếp của từng level (không giữ thứ tự, không trùng)

Ứng dụng thực tế

# Lọc DataFrame theo level của MultiIndex
df = pd.DataFrame({'value': range(6)}, index=multiIndex)
df['level_one'] = df.index.get_level_values('One')
df['level_two'] = df.index.get_level_values('Two')

# Groupby theo level
df.groupby(level='One').sum()

# Reset level thành cột
df.reset_index(level='Two')