我有两个相同大小的数据框,如下所示:
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()
由于这些数据框都与成本相关,所以我想将它们合并到一个结构中,这样我就可以说类似 cost[i] 的内容并获得类型 i 的成本矩阵。
我尝试如下使用多索引:
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)
col1 col2
ts cat
2014-01-01 A NaN NaN
B NaN NaN
C NaN NaN
D NaN NaN
2014-02-01 A NaN NaN
B NaN NaN
C NaN NaN
D NaN NaN
但是,我无法用已有的两个“较小”数据框填充“大”数据框。我试过这样的事情,但我没有成功:
df.loc["2014-01-01",:] = newdf1
df.loc["2014-02-01",:] = newdf2
有大佬知道怎么解决吗?谢谢!
最佳答案
使用concat
为每个 DataFrame 创建新索引,因此不需要空 DataFrame:
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']
如果输入是 DataFrames 列表
使用列表理解:
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
关于python - 如何将两个二维数据框合并为一个多索引多维 Pandas 数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53781669/