Python 从另一个多索引数据帧的索引填充数据帧列的矢量化方法?

Python 从另一个多索引数据帧的索引填充数据帧列的矢量化方法?,python,pandas,dataframe,multi-index,Python,Pandas,Dataframe,Multi Index,假设我有一个多索引数据帧df1: xy i0 i1 aaa a 16 b 2 5 c 3 4 bbb x 4 3 y 5 2 z 6 1 使用第二个数据帧df2: foo-bar-cat 0.925481 0.682102 aaa 1 0.620557 0.375114 aaa 2 0.788425 0.746436 bbb 3 0.247594 0.902258 aaa 40.146786 0.048585 bbb 5 0.256904 0.327165 bbb 我想使用第一个数据帧的第二

假设我有一个多索引数据帧
df1

xy
i0 i1
aaa a 16
b 2 5
c 3 4
bbb x 4 3
y 5 2
z 6 1
使用第二个数据帧df2:

foo-bar-cat
0.925481 0.682102 aaa
1 0.620557 0.375114 aaa
2 0.788425 0.746436 bbb
3 0.247594 0.902258 aaa
40.146786 0.048585 bbb
5 0.256904 0.327165 bbb
我想使用第一个数据帧的第二级索引列表来填充第二个数据帧
df2
中的一列,作为如下数组:

foo-bar cat目录
0.925481 0.682102 aaa['a','b','c']
1 0.620557 0.375114 aaa['a','b','c']
20.788425 0.746436桶['x','y','z']
3 0.247594 0.902258 aaa['a','b','c']
40.146786 0.048585 bbb['x','y','z']
5 0.256904 0.327165桶['x','y','z']
我可以(缓慢地)通过迭代来实现这一点,但是应该如何使用矢量化方法来实现呢

使用
apply
进行迭代:

def迭代(行):
返回列表(df1.loc[row['cat']].index.get_level_value(0))
df2['catlist']=df2.apply(迭代,轴=1)
您可以使用将多索引转换为数据帧,然后使用gropuby和use来列出。现在映射到

mapping=df1.index.to_frame(index=False).groupby(“i0”)[“i1”].agg(列表)
df2[“catlist”]=df2[“cat”].映射(映射)
富吧猫名单
0.925481 0.682102 aaa[a、b、c]
1 0.620557 0.375114 aaa[a、b、c]
20.788425 0.746436 bbb[x,y,z]
3 0.247594 0.902258 aaa[a、b、c]
40.146786 0.048585 bbb[x,y,z]
50.256904 0.327165 bbb[x,y,z]