【发布时间】:2021-03-12 21:06:09
【问题描述】:
我有这个具有不同 MultiIndex 级别的虚拟 DataFrame:
A = pandas.DataFrame({"A" : [1, 5], "B" : [3, 5], "Output1" : [6, 8]}).set_index(["A", "B"]).unstack().fillna(0)
Output1
B 3 5
A
1 6.0 0.0
5 0.0 8.0
B = pandas.DataFrame({"A" : [1, 6], "B" : [3, 5], "C" : [33, 55], "Output2" : [6, 7, 8]}).set_index(["A", "B", "C"]).unstack([1, 2]).fillna(0)
Output2
B 3 5
C 33 55
A
1 6.0 0.0
6 0.0 8.0
我想加入两个 DataFrame-s 并获得以下结果:
(Output2, 3, 33) (Output2, 5, 55) (Output1, 3) (Output1, 5)
A
1 6.0 0.0 6.0 0.0
5 0.0 0.0 0.0 8.0
6 0.0 8.0 0.0 0.0
我能够使用
得到这个结果res = B.join(A, how='outer').fillna(0)
但是,当我颠倒 A 和 B 时,B 的第一级索引消失了……并且级别数似乎被强制输入到连接断言的第一个 DataFrame 中。
达到预期结果的优雅方法是什么?
当前解决方案的第二个问题是可以如下查询DataFrame A或B:
A["Output1"]
B["Output2"]
但由于 MultiIndex-s 似乎被展平,因此无法以这种方式查询结果:
res["Output1"] #crash
res["Output2"] #crash
【问题讨论】:
-
您的问题到底是什么?你可以这样做:
res = pd.concat((B, A), axis=1).fillna(0) -
是的,这是同一个问题: concat((B,A)) 提供与 concat((A,B)) 不同的结果,并且无法以与 A 或 B 相同的方式查询结果:例如,MultiIndex 被展平,无法调用 res["Output1"]。我希望它澄清一点
-
在一个索引中,您有 3 个级别,而在另外两个索引中,“A”的最后一个级别的合适值是多少?
-
任何适合,例如“-”或“停止”或无
标签: python pandas dataframe join outer-join