给出两个不同的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是一个“数据时间”对象
谢谢
答案 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