>백엔드 개발 >파이썬 튜토리얼 >Pandas MultiIndex DataFrames에서 행을 효율적으로 선택하는 방법은 무엇입니까?

Pandas MultiIndex DataFrames에서 행을 효율적으로 선택하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-12 19:01:16269검색

How to Efficiently Select Rows in Pandas MultiIndex DataFrames?

Pandas MultiIndex DataFrame에서 행 선택

문제 요약

MultiIndex가 포함된 Pandas DataFrame이 있는 경우 특정 값을 기반으로 행을 선택하는 방법/ 각 인덱스 수준의 레이블은 무엇입니까?

슬라이싱 loc

df.loc[key, :]
  • key는 각 인덱스 수준에 하나씩 있는 레이블 튜플입니다.
  • 이는 다양한 수준의 특정 값을 기반으로 행을 선택하는 편리하고 간결한 방법을 제공합니다.

슬라이싱 xs

df.xs(level_key, level=level_name, drop_level=True/False)
  • level_key는 특정 인덱스 레벨의 키입니다.
  • drop_level은 결과 DataFrame에서 레벨을 삭제해야 하는지 여부를 제어합니다.
  • xs는 단일 레벨에서 슬라이싱할 때 특히 유용합니다.

다음으로 필터링 query

df.query("condition")
  • condition은 필터링 기준을 지정하는 부울 표현식입니다.
  • 여러 인덱스 수준에 걸쳐 유연한 필터링을 지원합니다.

get_level_values ​​사용

mask = df.index.get_level_values(level_name).isin(values_list)
selected_rows = df[mask]
  • 부울 생성 특정 인덱스 수준의 값을 기반으로 마스크를 만듭니다.
  • 더 복잡한 필터링 작업이나 여러 값을 분할할 때 유용합니다.

예 1: '1' 수준에서 특정 값을 가진 행을 선택하고 'two':

# Using loc
selected_rows = df.loc[['a'], ['t', 'u']]

# Using xs
selected_rows = df.xs('a', level='one', drop_level=False)
selected_rows = selected_rows.xs(['t', 'u'], level='two')

# Using query
selected_rows = df.query("one == 'a' and two.isin(['t', 'u'])")

# Using get_level_values
one_mask = df.index.get_level_values('one') == 'a'
two_mask = df.index.get_level_values('two').isin(['t', 'u'])
selected_rows = df[one_mask & two_mask]

예 2: 'two' 수준의 수치적 부등식을 기준으로 행 필터링:

# Using query
selected_rows = df.query("two > 5")

# Using get_level_values
two_mask = df.index.get_level_values('two') > 5
selected_rows = df[two_mask]

팁 및 고려 사항

  • 슬라이싱/필터링 작업의 복잡성을 고려하세요. 그에 따라 적절한 방법을 선택하세요.
  • 단일 또는 소수 수준의 간단한 슬라이싱에는 loc 또는 xs가 선호됩니다.
  • 복잡한 필터링이나 여러 값에 대한 슬라이싱의 경우 query 또는 get_level_values를 다음과 같이 사용하는 것이 좋습니다. 더 많은 유연성을 제공합니다.
  • 복잡한 슬라이싱 작업을 지정하려면 pd.IndexSlice를 사용하세요. loc.
  • sort_index()는 정렬되지 않은 MultiIndex가 있는 대규모 DataFrame의 성능을 향상시킬 수 있습니다.

위 내용은 Pandas MultiIndex DataFrames에서 행을 효율적으로 선택하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.