【发布时间】:2019-10-05 18:07:48
【问题描述】:
我有一个与这个问题有些相似的问题,因此我使用了相同的示例:https://stackoverflow.com/questions/46722740/hierarchical-data-efficiently-build-a-list-of-every-descendant-for-each-node#=
我有一个两列数据集,描述了形成一棵大树的公司的多个子父关系。我想用它来计算树的高度。
原始输入:
child parent
8 1000 1000
1 2010 1000
7 2100 1000
5 2110 1000
3 3000 2110
2 3011 2010
4 3033 2100
0 3102 2010
6 3111 2110
我想做的是得到这棵树的高度。在这种特定情况下,高度将是三。
我不确定如何在 Python 或 PySpark 中执行此操作。我不知道这是否可能。我的思维模式是首先使用一些包 f.e. 构建一棵树。然后计算高度。但是,我根本不知道如何在 Python/PySpark 中执行此操作。我是用编程语言创建树的初学者,虽然我可以手工绘制,但对使用编程构建自己的树知之甚少。
【问题讨论】:
-
您可以使用字典和/或列表自己构建树,也可以使用
networkx等库。如果您要自己构建它,我建议您离开计算机并手动完成您的示例。您将如何根据您的示例子/父数据在一张纸上构建一棵树? -
我无法导入图像。但是,如果您单击我问题中的链接,则原始帖子已经添加了图像。我确实了解树是如何构建的,但我不知道如何使用 Python 创建树。我想我在我的主要帖子中不清楚这一点,我已经编辑了我的主要帖子。
-
我用我的手机发送这条评论。我最终会在明天回答你的问题。这个想法是声明一个 Node 类,它可能有一个子列表,甚至没有。如果它没有孩子的列表,它就是一片叶子。这是'3000'、'3011'、'3033'、'3102'的情况和 '3111'在你的例子中。要获得节点的高度,您需要考虑其所有子节点的 max(height) +1。如果它是一片叶子,它的高度当然是 1。
-
@Meziane 如果您能给我一个关于如何执行此操作的代码,我将不胜感激。
标签: python dataframe recursion tree networkx