Итак, это моя проблема:
dfa = pd.DataFrame({"a": [["a", "b", "c"][int(k/10)] for k in range(30)],
"b": ["a" + repr([10, 20, 30, 40, 50, 60][int(k/5)]) for k in range(30)],
"c": np.arange(30),
"d": np.random.normal(size=30)}).set_index(["a","b","c"])
dfb = pd.DataFrame({"a": [["a", "b", "c"][int(k/2)] for k in range(6)],
"b": ["a" + repr([10, 20, 30, 40, 50, 60][k]) for k in range(6)],
"m": np.random.normal(size=6)**2}).set_index(["a","b"])
По существу у меня есть два кадра данных с мультииндексами, и я хочу разделить dfa.d
на dfb.m
, присоединившись к ("a", "b")
. Я не могу наивно делать dfa.d / dfb.m
или join
, потому что он говорит, что merging with more than one level overlap on a multi-index is not implemented
.
Самый простой способ (lol) сделать это, что я нашел:
dfc = dfa.reset_index().set_index(["a", "b"]).join(dfb)
dfc["r"] = dfc.d / dfc.m
dfd = dfc.reset_index().set_index(["a", "b", "c"])[["r"]]
Любые ярлыки?