从给定数据框创建多级数据框

时间:2018-10-23 10:44:25

标签: pandas

给出两个不同的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  a  b  b           
2016-11-21  2  3  1  0
2016-11-22  3  1  4  0
2016-11-23  5  1  2  6
2016-11-24  6  1  3  5
2016-11-25  6  0  3  2

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

谢谢

1 个答案:

答案 0 :(得分:4)

使用concat

df = pd.concat([A, B], keys=('A','B'), axis=1)
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

并为排序级别添加sort_index

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

不推荐,但是可以:

df = pd.concat([A, B], keys=('A','B'), axis=1)

cols = df.columns.get_level_values(0)
df = df.sort_index(axis=1, level=1)
df.columns = [cols, df.columns.get_level_values(1)]
print (df)
            A     B   
            a  a  b  b
2016-11-21  2  3  1  0
2016-11-22  3  1  4  0
2016-11-23  5  1  2  6
2016-11-24  6  1  3  5
2016-11-25  6  0  3  2

因为选择列是问题所在,因为列名重复:

print (df['A'])
            a  a
2016-11-21  2  3
2016-11-22  3  1
2016-11-23  5  1
2016-11-24  6  1
2016-11-25  6  0