【问题标题】:How to create a multilevel dataframe in pandas?如何在熊猫中创建多级数据框?
【发布时间】:2017-04-10 17:48:15
【问题描述】:

给定两个不同的df:

'A'

            a  b         
2016-11-21  2  1
2016-11-22  3  4
2016-11-23  5  2 
2016-11-24  6  3 
2016-11-25  6  3

'B'

            a  b         
2016-11-21  3  0
2016-11-22  1  0
2016-11-23  1  6 
2016-11-24  1  5 
2016-11-25  0  2

如何创建这种形状的“多级”数据框:

'C'

            A     B
            a  b  a  b           
2016-11-21  2  1  3  0
2016-11-22  3  4  1  0
2016-11-23  5  2  1  6
2016-11-24  6  3  1  5
2016-11-25  6  3  0  2

*index 是一个“数据时间”对象

谢谢

【问题讨论】:

    标签: python python-2.7 pandas dataframe multi-level


    【解决方案1】:

    一种选择是使用MultiIndex()AB 构造列级别,然后将它们连接起来:

    import pandas as pd
    A.columns = pd.MultiIndex.from_product([['A'], A.columns])
    B.columns = pd.MultiIndex.from_product([['B'], B.columns])
    pd.concat([A, B], axis = 1)
    
    #           A       B
    #           a   b   a   b
    #2016-11-21 2   1   3   0
    #2016-11-22 3   4   1   0
    #2016-11-23 5   2   1   6
    #2016-11-24 6   3   1   5
    #2016-11-25 6   3   0   2
    

    【讨论】:

    • 为什么不在结果 df 上使用 MultiIndex.from_product() 一次? result = pd.concat([A, B], axis=1) result.columns = pd.MultiIndex.from_product([('A', 'B'), A.columns])
    • 另外,为什么列式多索引的第一级没有按照 jezrael 的答案对齐?
    • 如果两个数据框有不同的维度或不同的列名,对结果使用 MultiIndex 将不起作用。如果您检查答案,则第一级的对齐方式与 jezrael 的答案相同。我可能在这里缩进不同。
    【解决方案2】:

    您可以将concat 与参数keys 一起使用:

    df = pd.concat([A, B], axis = 1, keys=(list('AB')))
    print (df)
                A     B   
                a  b  a  b
    2016-11-21  2  1  3  0
    2016-11-22  3  4  1  0
    2016-11-23  5  2  1  6
    2016-11-24  6  3  1  5
    2016-11-25  6  3  0  2
    

    【讨论】:

    • 这非常适合我的,公认的简单用例。
    猜你喜欢
    • 2022-01-13
    • 2017-12-16
    • 1970-01-01
    • 2022-07-28
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 2021-06-06
    • 2017-02-19
    相关资源
    最近更新 更多