Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将多索引熊猫数据帧与单索引熊猫数据帧合并_Python_Pandas_Dataframe_Merge_Multi Index - Fatal编程技术网

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值的结构(多索引)