Python Pandas广泛到长格式更改与列标题分裂

时间:2016-11-16 22:22:33

标签: python pandas split reshape s

我有一个包含以下列标题和行示例的表:

  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重复。

我想我可以使用for循环来做到这一点,但它有更多的pythonic方式吗?

为了增加复杂性,我需要为每个测试添加额外的信息列。我想我可以使用字典,但是如何在每个相应的行中插入有关Test1的信息呢?

1 个答案:

答案 0 :(得分:8)

您可以将列拆分为多索引列,然后重新整形数据框:

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