programing

다중 인덱스 데이터 프레임에서 레벨을 제거하는 방법은 무엇입니까?

yellowcard 2023. 9. 12. 19:56
반응형

다중 인덱스 데이터 프레임에서 레벨을 제거하는 방법은 무엇입니까?

예를 들어 다음과 같은 것이 있습니다.

In [1]: df = pd.DataFrame([8, 9],
                          index=pd.MultiIndex.from_tuples([(1, 1, 1),
                                                           (1, 3, 2)]),
                          columns=['A'])

In [2] df
Out[2]: 
       A
1 1 1  8
  3 2  9

인덱스에서 마지막 레벨을 제거하는 데 이보다 더 나은 방법이 있습니까?

In [3]: pd.DataFrame(df.values,
                     index=df.index.droplevel(2),
                     columns=df.columns)
Out[3]: 
     A
1 1  8
  3  9
df.reset_index(level=2, drop=True)
Out[29]: 
     A
1 1  8
  3  9

DataFrame 인스턴스를 새로 만들 필요가 없습니다!인덱스를 수정할 수 있습니다.

df.index = df.index.droplevel(2)
df

     A
1 1  8
  3  9

끝에서 선택할 수 있도록 음의 지수를 지정할 수도 있습니다.

df.index = df.index.droplevel(-1)

인덱스에 다음과 같은 이름이 있는 경우

       A
X Y Z
1 1 1  8
  3 2  9

그런 다음 인덱스 이름을 지정하여 제거할 수도 있습니다.

df.index = df.index.droplevel('Z')

0.24 이상부터 직접 연결 가능합니다.df. 인덱스의 마지막 레벨을 삭제하려면 다음을(를)

>>> df

         col
1 5 1 4  foo
  3 2 8  bar
2 4 3 7  saz

>>> df.droplevel(-1)

       col
1 5 1  foo
  3 2  bar
2 4 3  saz

레벨이 떨어지는 축은 다음과 같이 제어할 수 있습니다.axis인수는 기본적으로 0, 즉 over index로 설정됩니다.목록을 제공하여 여러 단계를 한 번에 삭제할 수 있으며, 색인에 이름이 있는 경우에도 해당 단계를 사용할 수 있습니다(링크된 문서에 예시됨).


참고: 논제는 다음과 같습니다.droplevel먼저 레이블로 해석하려고 합니다. 따라서 레벨 중 하나에 정수 이름이 있는 경우 삭제됩니다. 즉, 위치가 아닙니다.

>>> df
                 col
this -1 other 0
1    5  1     4  foo
     3  2     8  bar
2    4  3     7  saz


# literally drops `-1` level
>>> df.droplevel(-1)

              col
this other 0
1    1     4  foo
     2     8  bar
2    3     7  saz

# literally level `0` is dropped
>>> df.droplevel(0)

               col
this -1 other
1    5  1      foo
     3  2      bar
2    4  3      saz

위치가 떨어지는 것을 확실하게 하기 위해, 우리는names속성을 지정하고 위치를 선택합니다.

>>> df
                 col
this -1 other 0
1    5  1     4  foo
     3  2     8  bar
2    4  3     7  saz

# go get the name of the last level, drop whatever it is
>>> df.droplevel(df.index.names[-1])

               col
this -1 other
1    5  1      foo
     3  2      bar
2    4  3      saz

# similarly...
>>> df.droplevel(df.index.names[0])

            col
-1 other 0
5  1     4  foo
3  2     8  bar
4  3     7  saz

마지막으로.droplevel새 데이터 프레임을 반환하므로,df = df.droplevel(...)변화를 보기 위해 필요합니다.df.

언급URL : https://stackoverflow.com/questions/17084579/how-to-remove-levels-from-a-multi-indexed-dataframe

반응형