2016-11-16 9 views
5

을 Spliting 긴 형식 변경에 와이드 파이썬 팬더 :열 제목 나는 다음과 같은 열 제목을 가진 테이블과 행의 예를 가지고

Subject level_1 Result1 Result2 
0 John Test1  10  0.5 
1 John Test2  20  0.3 

:

Subject Test1-Result1 Test1-Result2 Test2-Result1 Test2-Result2 
0 John    10   0.5    20   0.3 

내가로 변환하고 싶습니다를 과목 목록이 Test1에 대해 한 번 반복되고 Test2에 대해 다시 반복됩니다.

내가 루프를 사용하여이 작업을 수행 할 수 있다고 생각하지만, 더 파이썬적인 방법이 있습니까?

추가 복잡성 때문에 각 테스트에 대해 추가 정보 열을 추가해야합니다. 사전을 사용할 수 있다고 가정합니다. 그러나 Test1에 대한 정보를 각 해당 행에 어떻게 삽입 할 수 있습니까?

+0

이 편집 주셔서 감사합니다! – JDS

답변

5

당신은 다중 인덱스 컬럼으로 열을 분할 한 다음 데이터 프레임을 바꿀 수 있습니다

df.set_index('Subject', inplace=True) 
df.columns = df.columns.str.split("-", expand=True) 
df.stack(level=0).rename_axis(['Subject', 'Test']).reset_index() 

enter image description here

+1

은 잠깐 똑같은 두뇌를 공유하고 있었음에 틀림 없습니다 :-) – piRSquared

+0

이것은 정말 잘 돌아가며 팬더 다중 라인 인덱싱에 대한 이해를 돕습니다. 고맙습니다! – JDS