为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

千巷猫影 2024-01-04 09:39:24
假设我有一个多索引数据框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]


查看完整回答
反对 回复 2024-01-04
  • 1 回答
  • 0 关注
  • 86 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信