Python 如何将两个二维数据帧合并为多索引多维数据帧?

Python 如何将两个二维数据帧合并为多索引多维数据帧?,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个大小相同的数据帧,如下所示: cost_type1 = pd.DataFrame([[1,2,3,4], [100,200,300,400]]).transpose() cost_type2 = pd.DataFrame([[1,4,9,25], [10,40,90,250]]).transpose() timestamps =["2014-01-01", "2014-02-01"] categories = ["A", "B","C","D"] idx = pd.MultiIndex

我有两个大小相同的数据帧,如下所示:

cost_type1 = pd.DataFrame([[1,2,3,4], [100,200,300,400]]).transpose()
cost_type2 = pd.DataFrame([[1,4,9,25], [10,40,90,250]]).transpose()
timestamps =["2014-01-01", "2014-02-01"]
categories = ["A", "B","C","D"]
idx = pd.MultiIndex.from_product([timestamps,categories], names=["ts", 
"cat"])
df = pd.DataFrame(index=idx, columns=["col1", "col2"])
由于这些数据帧都与成本有关,我想将它们合并到一个结构中,这样我就可以说类似于成本[I]的内容,并得到类型I的成本矩阵

我尝试使用多索引,如下所示:

cost_type1 = pd.DataFrame([[1,2,3,4], [100,200,300,400]]).transpose()
cost_type2 = pd.DataFrame([[1,4,9,25], [10,40,90,250]]).transpose()
timestamps =["2014-01-01", "2014-02-01"]
categories = ["A", "B","C","D"]
idx = pd.MultiIndex.from_product([timestamps,categories], names=["ts", 
"cat"])
df = pd.DataFrame(index=idx, columns=["col1", "col2"])
我得到一个很好的空数据帧,如下所示:(out)

然而,我无法用我已有的两个“较小”的数据框填充“较大”的数据框。我试过这样的方法,但没有成功:

df.loc["2014-01-01",:] = newdf1
df.loc["2014-02-01",:] = newdf2
你们谁知道怎么解决这个问题?谢谢

用于为每个数据帧创建新索引,因此不需要空数据帧:

timestamps = ["2014-01-01", "2014-02-01"]
categories = ["A", "B","C","D"]
idx = pd.MultiIndex.from_product([timestamps,categories], names=["ts", "cat"])

df = pd.concat([cost_type1.set_index([categories]), 
                cost_type2.set_index([categories])], keys=timestamps)
df.columns=["col1", "col2"]
df.index.names=['ts','cat']
如果输入是数据帧列表,请使用列表理解:

dfs = [cost_type1, cost_type2]
df = pd.concat([x.set_index([categories]) for x in dfs], keys=timestamps)
df.columns=["col1", "col2"]
df.index.names=['ts','cat']
print (df)
                col1  col2
ts         cat            
2014-01-01 A       1   100
           B       2   200
           C       3   300
           D       4   400
2014-02-01 A       1    10
           B       4    40
           C       9    90
           D      25   250
尝试
df.loc[“2014-01-01”,:]=成本类型1.值。。。等等