从pandas数据框父子表获取父的所有后代
问题描述:
我有一个包含父ID和子ID的Pandas数据框。我需要帮助来建立一个更新的数据框,列出每个父级的每个后代。
为了澄清输出的外观,这是
dba.stackexchange上的一篇文章,其中使用SQL完成了我要在python中尝试做的事情。
这是输入DataFrame的示例:
parent_id child_id 0 3111 4321 1 2010 3102 2 3000 4023 3 1000 2010 4 4023 5321 5 3011 4200 6 3033 4113 7 5010 6525 8 3011 4010 9 3102 4001 10 2010 3011 11 4023 5010 12 2110 3000 13 2100 3033 14 1000 2110 15 5010 6100 16 2110 3111 17 1000 2100 18 5010 6016 19 3033 4311
以下是实际编码为DataFrame的示例数据
df = pd.DataFrame( { 'parent_id': [3111, 2010, 3000, 1000, 4023, 3011, 3033, 5010, 3011, 3102, 2010, 4023, 2110, 2100, 1000, 5010, 2110, 1000, 5010, 3033], 'child_id': [4321, 3102, 4023, 2010, 5321, 4200, 4113, 6525, 4010, 4001, 3011, 5010, 3000, 3033, 2110, 6100, 3111, 2100, 6016, 4311] } )
这是我尝试使用递归列表构建策略的尝试
parent_list = [] def recurse(parent, child, root_parent): # initialize on first run of each branch if root_parent is None: root_parent = parent parent_list.append((parent, child)) recurse(parent, child, root_parent) # for each parent find every child recursively for index, row in df.iterrows(): if row['parent_id'] is child: parent_list.append((root_parent, row['child_id'])) recurse(row['parent_id'], row['child_id'], root_parent) # recurse down each parent branch for i, r in df.iterrows(): recurse(r['parent_id'], r['child_id'], None) return parent_list
…目前仅复制数据,因为我没有正确遍历树。
输出的格式应遵循输入的格式。我想要两列父级和子级ID的表,如下面的示例输出所示。
这是上述数据的预期输出:
parent_id child_id 0 1000 2010 1 1000 2100 2 1000 2110 3 1000 3000 4 1000 3011 5 1000 3033 6 1000 3102 7 1000 3111 8 1000 4001 9 1000 4010 10 1000 4023 11 1000 4113 12 1000 4200 13 1000 4311 14 1000 4321 15 1000 5010 16 1000 5321 17 1000 6016 18 1000 6100 19 1000 6525 20 2010 3011 21 2010 3102 22 2010 4001 23 2010 4010 24 2010 4200 25 2100 3033 26 2100 4113 27 2100 4311 28 2110 3000 29 2110 3111 30 2110 4023 31 2110 4321 32 2110 5010 33 2110 5321 34 2110 6016 35 2110 6100 36 2110 6525 37 3000 4023 38 3000 5010 39 3000 5321 40 3000 6016 41 3000 6100 42 3000 6525 43 3011 4010 44 3011 4200 45 3033 4113 46 3033 4311 47 3102 4001 48 3111 4321 49 4023 5010 50 4023 5321 51 4023 6016 52 4023 6100 53 4023 6525 54 5010 6016 55 5010 6100 56 5010 6525
奖励点,用于为每行添加从parent_id
到的另一列深度/距离child_id
。TIA
我最近想将我使用的刮板移植mechanize.Browser到Python3。我还没有找到任何python3-mechanize软件包或类似的东西。我还不熟悉带有一些特殊过程的 ...