Pandas Multi-Index를 열로 변환


155

두 가지 색인 수준의 데이터 프레임이 있습니다.

                         value
Trial    measurement
    1              0        13
                   1         3
                   2         4
    2              0       NaN
                   1        12
    3              0        34 

내가 이것으로 바꾸고 싶은 것 :

Trial    measurement       value

    1              0        13
    1              1         3
    1              2         4
    2              0       NaN
    2              1        12
    3              0        34 

어떻게하면 좋을까요?

here 지시 된대로 데이터를 집계하고 싶기 때문에 이것이 필요 하지만 인덱스로 사용중인 경우 열을 선택할 수 없습니다.


2
중복 : stackoverflow.com/questions/18624039/… 첫 번째 제안을 원합니다. .reset_index()
TomAugspurger 1

1
많은 감사, 실제로 이것을 많이 둘러 보았지만 "멀티 인덱스를 열로 만들기"와 비슷한 쿼리는 항상 데이터 프레임을 피벗하려는 스레드를 얻었습니다 ...
TheChymera

3
이미 :)을 알고 답을 찾을 항상 쉽게
TomAugspurger

답변:


192

reset_index ()는 열과 DataFrame에 인덱스 값을 전송하는 팬더 DataFrame 방법이다. 매개 변수의 기본 설정은 drop = False (색인 값을 열로 유지함)입니다.

.reset_index(inplace=True)DataFrame 이름 뒤에 추가해야 할 모든 것 :

df.reset_index(inplace=True)  

3
내 색인 수준이 3 인 경우 내 재설정이 작동하지 않았습니다. 대안은 새로 재설정 된 데이터 프레임을 새로운 것에 할당하는 것입니다 : df2 = df.reset_index ()
Gorkem

8
특정 수준 만 재설정하려면 다음을 사용하십시오.df.reset_index(level=[...])
cs95

20

이것은 실제로 귀하의 경우에는 적용되지 않지만 5 분 전과 같은 다른 사람들이 알게되면 도움이 될 수 있습니다. multindex의 이름이 다음과 같은 경우 :

                         value
Trial        Trial
    1              0        13
                   1         3
                   2         4
    2              0       NaN
                   1        12
    3              0        34 

df.reset_index(inplace=True) 실패하면 작성된 컬럼의 이름이 같을 수 없습니다.

그런 다음 multindex의 이름을 바꿔서 df.index = df.index.set_names(['Trial', 'measurement'])가져 오십시오.

                           value
Trial    measurement       

    1              0        13
    1              1         3
    1              2         4
    2              0       NaN
    2              1        12
    3              0        34 

그리고 df.reset_index(inplace=True)매력처럼 작동합니다.

연도 및 월별로 날짜 시간 열 (인덱스 아님)으로 그룹화 한 후이 문제가 발생하여 연도 및 월 live_date이 모두 이름이 지정되었습니다 live_date.


1
시험판 가치를 스스로 반복하는 방법? 나는 같은 문제가 있었고 내 가치가 스스로 반복되지 않는다는 것을 제외하고는 효과가 있습니다.
Rich

4

주석에서 @ cs95가 언급했듯이 한 수준 만 삭제하려면 다음을 사용하십시오.

df.reset_index(level=[...])

이렇게하면 재설정 후 원하는 인덱스를 다시 정의하지 않아도됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.