假設(shè)我有一個多索引數(shù)據(jù)框df1: x yi0 i1 aaa a 1 6 b 2 5 c 3 4bbb x 4 3 y 5 2 z 6 1使用第二個數(shù)據(jù)框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我想使用第一個數(shù)據(jù)幀的二級索引列表將第二個數(shù)據(jù)幀中的列填充df2為數(shù)組,如下所示: 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']我可以通過迭代(緩慢地)來做到這一點,但是應(yīng)該如何使用矢量化 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貢獻(xiàn)1850條經(jīng)驗 獲得超11個贊
您可以使用 將MultiIndex轉(zhuǎn)換為數(shù)據(jù)幀pd.MultiIndex.to_frame
,然后使用 gropuby 并使用GroupBy.agg
來列出。現(xiàn)在映射在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
提交
取消