【发布时间】:2019-11-10 05:43:19
【问题描述】:
我想加入两个 DataFrame。第一个是多索引 DataFrame,第二个是简单的 DataFrame。
import pandas as pd
import numpy
a = pd.DataFrame({'a': {('x', 0) : 1, ('x', 1) : 2, ('y', 0): 3, ('y', 1): 5}, 'b': {('x', 0) : 2, ('x', 1) : 4, ('y', 0): 2, ('y', 1): 7}}).T
print(a)
# x y
# 0 1 0 1
# a 1 2 3 5
# b 2 4 2 7
b = pd.DataFrame({'y': np.arange(10), 'z': np.arange(10, 20)})
magical_merge(left=a, right=b, on='y')
# x y z
# 0 1 0 1 0 1
# a 1 2 3 5 13 15
# b 2 4 2 7 12 17
现在我正在使用这样的第二个索引循环来执行此操作:
merged = []
for l in [0, 1]:
m = pd.merge(left=a.xs(l, axis=1, level=1),right=b, on='y')
m_indices = pd.MultiIndex.from_product([m.columns, [l]])
m.columns = m_indices
merged.append(m)
result = pd.concat(merged, axis=1).sort_index(axis=1)
熊猫自己能做到这一点吗?
【问题讨论】:
-
那么你想合并原始数据帧中Y值对应的Z值吗?
-
是的,但我想在结果数据帧(多索引)中保留 Y 值的结构
标签: python pandas dataframe merge multi-index