Python 将多索引熊猫数据帧与单索引熊猫数据帧合并
我想加入两个数据帧。第一个是多索引数据帧,第二个是简单数据帧Python 将多索引熊猫数据帧与单索引熊猫数据帧合并,python,pandas,dataframe,merge,multi-index,Python,Pandas,Dataframe,Merge,Multi Index,我想加入两个数据帧。第一个是多索引数据帧,第二个是简单数据帧 将熊猫作为pd导入 进口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 印刷品(a) #xy # 0 1 0 1 #a 1235 #b 2 4 2 7 b=pd.DataFrame({'y':np.arange(10),'z':np.arange(
将熊猫作为pd导入
进口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
印刷品(a)
#xy
# 0 1 0 1
#a 1235
#b 2 4 2 7
b=pd.DataFrame({'y':np.arange(10),'z':np.arange(10,20)})
神奇的合并(左=a,右=b,开=y')
#x y z
# 0 1 0 1 0 1
#12351315
#B242717
现在,我在第二个索引上进行循环,如下所示:
merged=[]
对于[0,1]中的l:
m=pd.merge(左=a.xs(l,轴=1,层=1),右=b,on='y')
m_index=pd.MultiIndex.from_乘积([m.columns,[l]]))
m、 列=m_索引
合并。追加(m)
结果=pd.concat(合并,轴=1)。排序索引(轴=1)
熊猫自己能做到这一点吗?您需要在多索引
df
(在您的情况下是a
)上堆叠和reset\u index
。接下来,merge
和set\u index
返回。最后,使用rename_axis
来显示多索引名称,并使用unstack
放回多索引列:
a.stack().reset_index().merge(b, on='y').set_index(['level_0', 'level_1']) \
.rename_axis(index=[None, None]).unstack()
Out[335]:
x y z
0 1 0 1 0 1
a 1 2 3 5 13 15
b 2 4 2 7 12 17
那么,您想合并与原始数据帧中的Y值相对应的Z值吗?是的,但我想保留结果数据帧中Y值的结构(多索引)