【问题标题】:How to split columns and merge them as rows? [duplicate]如何拆分列并将它们合并为行? [复制]
【发布时间】:2019-09-20 10:56:17
【问题描述】:

我有一个数据框如下:

ID    Date   ColA1   ColB1   ColA2   ColB2   ColA3   ColB3 
id1   date1   1        2      3        4       5       6      
id2   date2   7        8      9        10      11      12

如何拆分 ColA2、ColB2、ColA3、ColB3 列并将它们作为行再次合并到数据集中(考虑到 ID 和 Date 列)?

预期输出:

ID   Date     ColA  ColB
id1  date1    1      2
id1  date1    3      4
id1  date1    5      6
id2  date2    7      8
id2  date2    9      10
id2  date2    11     12

谢谢!

【问题讨论】:

    标签: python pandas dataframe jupyter-notebook


    【解决方案1】:

    你需要wide_to_long

    pd.wide_to_long(df.reset_index(), stubnames = ['ColA', 'ColB'], i = 'index', j = 'value').reset_index(drop = True)
    
        ColA    ColB
    0   1   2
    1   7   8
    2   3   4
    3   9   10
    4   5   6
    5   11  12
    

    编辑
    输出不带reset_index()

    pd.wide_to_long(df.reset_index(), stubnames = ['ColA', 'ColB'], i = 'index', j = 'value')
                ColA    ColB
    index   value       
    0       1   1       2
    1       1   7       8
    0       2   3       4
    1       2   9       10
    0       3   5       6
    1      3    11      12
    

    编辑2
    使用 OP 提供的新数据样本:

    pd.wide_to_long(df, stubnames = ['ColA', 'ColB'], i = ['ID', 'Date'], j = 'value').reset_index([0,1])
    
        ID  Date    ColA    ColB
    value               
    1   id1 date1   1   2
    2   id1 date1   3   4
    3   id1 date1   5   6
    1   id2 date2   7   8
    2   id2 date2   9   10
    3   id2 date2   11  12
    

    【讨论】:

    • 只是想了解一下,您必须使用reset_index 为您的“i”值创建一个索引列,因为您无法选择 ColA 或 ColB,而您的 j 值只是什么的任意名称在存根名称之后?
    • 您好,特里,感谢您的帮助。对此,我真的非常感激。我刚刚更新了原始问题,添加了ID 和Date 列,这实际上使问题有所不同。你能看看,看看你能不能帮忙?谢谢!
    • @BenPap 是的,没错,你没看错,我把输出加了不带reset_index()的输出,方便整个过程的可视化
    • @Annie 你能确认我的输出是否正确吗?在您的预期输出中,最后两行中有date1。在我有date2
    • 您好,Terry,抱歉打错了,预期的输出应该在最后 3 行中有 date2。但是,当我在我的数据集上运行代码时(这个问题中的一个更复杂的版本:存根名称中的 4 列,以及用作 id_variable 的 3 列),我收到一条错误消息,指出 the id variables need to uniquely identify each row.。我可以知道如何解决这个错误吗?谢谢你的时间,我真的很感激。
    猜你喜欢
    • 1970-01-01
    • 2012-09-25
    • 2015-05-15
    • 2016-01-05
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多