假设我有一个多索引数据框df1: x yi0 i1 aaa a 1 6 b 2 5 c 3 4bbb x 4 3 y 5 2 z 6 1使用第二个数据框df2: foo bar cat0 0.925481 0.682102 aaa1 0.620557 0.375114 aaa2 0.788425 0.746436 bbb3 0.247594 0.902258 aaa4 0.146786 0.048585 bbb5 0.256904 0.327165 bbb我想使用第一个数据帧的二级索引列表将第二个数据帧中的列填充df2为数组,如下所示: foo bar cat catlist0 0.925481 0.682102 aaa ['a','b','c']1 0.620557 0.375114 aaa ['a','b','c']2 0.788425 0.746436 bbb ['x','y','z']3 0.247594 0.902258 aaa ['a','b','c']4 0.146786 0.048585 bbb ['x','y','z']5 0.256904 0.327165 bbb ['x','y','z']我可以通过迭代(缓慢地)来做到这一点,但是应该如何使用矢量化 pandas 方法来完成此操作?迭代使用apply:def iterate(row): return list(df1.loc[row['cat']].index.get_level_values(0))df2['catlist'] = df2.apply(iterate, axis=1)
1 回答
慕盖茨4494581
TA贡献1850条经验 获得超11个赞
您可以使用 将MultiIndex转换为数据帧pd.MultiIndex.to_frame
,然后使用 gropuby 并使用GroupBy.agg
来列出。现在映射在pd.Series.map
mapping = df1.index.to_frame(index=False).groupby("i0")["i1"].agg(list)
df2["catlist"] = df2["cat"].map(mapping)
foo bar cat catlist
0 0.925481 0.682102 aaa [a, b, c]
1 0.620557 0.375114 aaa [a, b, c]
2 0.788425 0.746436 bbb [x, y, z]
3 0.247594 0.902258 aaa [a, b, c]
4 0.146786 0.048585 bbb [x, y, z]
5 0.256904 0.327165 bbb [x, y, z]
添加回答
举报
0/150
提交
取消