Python Pandas宽格式转长格式,列标题拆分

6

我有一张表格,其中包含以下列标题和一行示例:

  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循环来完成这个任务,但是否有更符合Python风格的方法呢?

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

1个回答

9
你可以将列分成多个索引列,然后重新塑造你的数据框架:
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
这个非常有效,帮助我开始理解 Pandas 的多行索引。谢谢! - JDS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接