如何合并多索引列数据框

时间:2017-10-01 10:32:45

标签: python pandas

我想将静态数据与时变数据合并。

第一个数据帧

a_columns = pd.MultiIndex.from_product([["A","B","C"],["1","2"]])
a_index = pd.date_range("20100101","20110101",freq="BM")
a = pd.DataFrame(columns=a_columns,index=a_index)#A

第二个数据框

b_columns = ["3","4","5"]
b_index = ["A","B","C"]
b = pd.DataFrame(columns=b_columns,index=b_index)

我如何加入这两个?我想要的数据框的形式为A,但有其他列。

谢谢!

1 个答案:

答案 0 :(得分:2)

我认为您需要按stack重新设置,然后按to_frame创建df - 对于concat need Datetimeindex,所以新索引来自{{的索引的第一个值1}}。

上次concat + sort_index

a

最后如果需要仅在第一行添加的列中替换#added some data - 2 a_columns = pd.MultiIndex.from_product([["A","B","C"],["1","2"]]) a_index = pd.date_range("20100101","20110101",freq="BM") a = pd.DataFrame(2,columns=a_columns,index=a_index)#A #added some data - 1 b_columns = ["3","4","5"] b_index = ["A","B","C"] b = pd.DataFrame(1,columns=b_columns,index=b_index) c = b.stack().to_frame(a.index[0]).T print (c) A B C 3 4 5 3 4 5 3 4 5 2010-01-29 1 1 1 1 1 1 1 1 1 d = pd.concat([a,c], axis=1).sort_index(axis=1) print (d) A B C 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 2010-01-29 2 2 1.0 1.0 1.0 2 2 1.0 1.0 1.0 2 2 1.0 1.0 1.0 2010-02-26 2 2 NaN NaN NaN 2 2 NaN NaN NaN 2 2 NaN NaN NaN 2010-03-31 2 2 NaN NaN NaN 2 2 NaN NaN NaN 2 2 NaN NaN NaN 2010-04-30 2 2 NaN NaN NaN 2 2 NaN NaN NaN 2 2 NaN NaN NaN 2010-05-31 2 2 NaN NaN NaN 2 2 NaN NaN NaN 2 2 NaN NaN NaN 2010-06-30 2 2 NaN NaN NaN 2 2 NaN NaN NaN 2 2 NaN NaN NaN 2010-07-30 2 2 NaN NaN NaN 2 2 NaN NaN NaN 2 2 NaN NaN NaN 2010-08-31 2 2 NaN NaN NaN 2 2 NaN NaN NaN 2 2 NaN NaN NaN 2010-09-30 2 2 NaN NaN NaN 2 2 NaN NaN NaN 2 2 NaN NaN NaN 2010-10-29 2 2 NaN NaN NaN 2 2 NaN NaN NaN 2 2 NaN NaN NaN 2010-11-30 2 2 NaN NaN NaN 2 2 NaN NaN NaN 2 2 NaN NaN NaN 2010-12-31 2 2 NaN NaN NaN 2 2 NaN NaN NaN 2 2 NaN NaN NaN

NaN

reindex类似的解决方案:

d[c.columns] = d[c.columns].ffill()
print (d)
            A                    B                    C                  
            1  2    3    4    5  1  2    3    4    5  1  2    3    4    5
2010-01-29  2  2  1.0  1.0  1.0  2  2  1.0  1.0  1.0  2  2  1.0  1.0  1.0
2010-02-26  2  2  1.0  1.0  1.0  2  2  1.0  1.0  1.0  2  2  1.0  1.0  1.0
2010-03-31  2  2  1.0  1.0  1.0  2  2  1.0  1.0  1.0  2  2  1.0  1.0  1.0
2010-04-30  2  2  1.0  1.0  1.0  2  2  1.0  1.0  1.0  2  2  1.0  1.0  1.0
2010-05-31  2  2  1.0  1.0  1.0  2  2  1.0  1.0  1.0  2  2  1.0  1.0  1.0
2010-06-30  2  2  1.0  1.0  1.0  2  2  1.0  1.0  1.0  2  2  1.0  1.0  1.0
2010-07-30  2  2  1.0  1.0  1.0  2  2  1.0  1.0  1.0  2  2  1.0  1.0  1.0
2010-08-31  2  2  1.0  1.0  1.0  2  2  1.0  1.0  1.0  2  2  1.0  1.0  1.0
2010-09-30  2  2  1.0  1.0  1.0  2  2  1.0  1.0  1.0  2  2  1.0  1.0  1.0
2010-10-29  2  2  1.0  1.0  1.0  2  2  1.0  1.0  1.0  2  2  1.0  1.0  1.0
2010-11-30  2  2  1.0  1.0  1.0  2  2  1.0  1.0  1.0  2  2  1.0  1.0  1.0
2010-12-31  2  2  1.0  1.0  1.0  2  2  1.0  1.0  1.0  2  2  1.0  1.0  1.0