2016-11-16 11 views
5

У меня есть таблица со следующими столбцами названиями и пример строки:Python Панды Wide в длинном формате Изменить с помощью колонок Заголовки Spliting

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

Я хотел бы, чтобы преобразовать его в:

Subject level_1 Result1 Result2 
0 John Test1  10  0.5 
1 John Test2  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

Это сработало очень хорошо и помогло мне начать понимать многострочное индексирование Pandas. Спасибо! – JDS