我有一个dataframe,它有一个id列和一个相关的array列,array列包含它的相关记录的id。
ID | NAME | RELATED_IDLIST
--------------------------
123 | mike | [345,456]
345 | alen | [789]
456 | sam | [789,999]
789 | marc | [111]
555 | dan | [333]
从上面来看,我需要在所有相关的子id和父id之间建立一个关系
ID | NAME | RELATED_IDLIST
--------------------------
123 | mike | [345,456,789,999,111]
345 | alen | [789,111]
456 | sam | [789,999,111]
789 | marc | [111]
555 | dan | [333]
我需要你帮我弄清楚上面的事。
1条答案
按热度按时间xcitsw881#
通过使用
Self joins
以及Window functions
你可以解决这个问题。我把代码分为5个步骤。算法如下:分解数组列表以创建单个记录(数据中不再有数组)
self-join id和相关(重命名为相关的\u idlist列)列
将具有相同a\u id的记录缩减为一个数组,将b\u id缩减为另一个数组
将两个数组列表列合并到一个组合数组中,并根据每个组合数组的最大大小对结果记录进行排序
选择排名为1的记录
您可以尝试以下代码: