python 컬럼 - 팬더:라벨별로 고유 한 멀티 인덱스 값 가져 오기




추출 조건문 (5)

Pandas 0.23.0은 마침내이 문제에 대한 훨씬 더 깔끔한 해결책을 introduced 습니다 : Index.unique() 대한 level 인수 :

In [3]: df.index.unique(level='co')
Out[3]: Index(['DE', 'FR'], dtype='object', name='co')

이것은 이제 권장되는 솔루션입니다. 메모리에서 레벨 값의 완전한 표현을 작성하고 다시 스캔하는 것을 피하기 때문에 훨씬 더 효율적입니다.

이 MultiIndex-ed DataFrame이 있다고 가정 해보십시오.

df = pd.DataFrame({'co':['DE','DE','FR','FR'],
                   'tp':['Lake','Forest','Lake','Forest'],
                   'area':[10,20,30,40],
                   'count':[7,5,2,3]})
df = df.set_index(['co','tp'])

다음과 같이 보입니다.

           area  count
co tp
DE Lake      10      7
   Forest    20      5
FR Lake      30      2
   Forest    40      3

인덱스 수준마다 고유 한 값검색하고 싶습니다. 이것은 다음을 사용하여 수행 할 수 있습니다.

df.index.levels[0]  # returns ['DE', 'FR]
df.index.levels[1]  # returns ['Lake', 'Forest']

제가 정말로하고 싶은 것은 레벨을 'co''tp' 이름붙여서 나열하는 것입니다. 내가 찾을 수있는 가장 짧은 두 가지 방법은 다음과 같습니다.

list(set(df.index.get_level_values('co')))  # returns ['DE', 'FR']
df.index.levels[df.index.names.index('co')]  # returns ['DE', 'FR']

그러나 그들 중 누구도 매우 우아합니다. 더 짧은 길이 있습니까?


레벨 조회를 반복적으로 수행하려는 경우 다음을 사용하여 색인 레벨 이름의 맵을 작성하여 고유 한 레벨을 레벨링 할 수 있습니다.

df_level_value_map = {
    name: level 
    for name, level in zip(df.index.names, df.index.levels)
}
df_level_value_map['']

그러나 한 번만이 조회를 수행하려는 경우이 방법은 원래의 시도보다 더 효율적 (또는 더 짧음)하지 않습니다.

그와 같은 사전 (또는 시리즈?)과 같은 이름을 가진 인덱스에 대한 메소드가 정말로 있었으면 좋겠습니다.

df.index.get_level_map(levels={...})

여기서 levels 매개 변수는 맵을 기존 레벨의 서브 세트로 제한 할 수 있습니다. 매개 변수가 없으면 다음과 같은 속성이 될 수 있습니다.

df.index.level_map

다른 방법은 df.index.levels[level_index] 를 호출하여 레벨 수를 찾는 것입니다 df.index.levels[level_index] 여기서 level_index는 df.index.names.index(level_name) 에서 유추 할 수 있습니다. 위의 예제에서는 level_name = 'co'입니다.

@ Happy001에 의해 제안 된 대답은 계산 집약적 인 고유를 계산합니다.


멀티 인덱스의 특정 수준 (및 수준 이름)의 고유 한 값을 원한다고 생각합니다. 나는 보통 다음과 같은 일을한다. 조금 길다.

In [11]: df.index.get_level_values('co').unique()
Out[11]: array(['DE', 'FR'], dtype=object)

Jupyter / Ipython 노트북을 사용 중이고 문제가있는 경우;

ax = df1.plot()

df2.plot(ax=ax)

동일한 셀 내부에서 명령을 실행하십시오 !! 그것은 연속적인 세포들로 분리 될 때 어떤 이유로 작동하지 않을 것입니다. 나를 위해서.





python pandas