如何在pandas中创建多级数据框?

8
给定两个不同的数据框:
'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是一个“日期时间”对象

谢谢

2个回答

11

其中一种选项是使用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]) - Alex
另外,为什么你的列式多级索引的第一层没有像jezrael的答案那样对齐呢? - Alex
如果两个数据帧具有不同的维度或不同的列名,则在结果上使用MultiIndex将无法工作。如果您查看答案,第一级与jezrael的答案以相同的方式对齐。我可能在这里缩进不同。 - Psidom

11
你可以使用带有keys参数的concat
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

1
这对于我的使用情况来说非常好,尽管它相对简单。 - alphazwest

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