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



给定两个不同的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

*索引是一个"数据时间"对象

谢谢

使用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

最新更新