【发布时间】:2020-02-03 16:46:14
【问题描述】:
我有一个代表公司层次结构树的大型数据集。举个例子,我可能有如下内容:
Child Parent
273500 273500
20574624 273500
2202652 1879450
19933526 1879450
18000796 18352628
18352628 19770000
1359996 20574624
1879450 20574624
18441258 20574624
20637582 20574624
20840426 20574624
20844632 20574624
20934910 20574624
20965442 20574624
21193122 20574624
21194666 21193122
19770000 20574624
19681810 18352628
19931554 20574624
18382902 1879450
19780666 1879450
20631784 20574624
如您所见,第一行是父节点。
我想做的是对数据进行排序,使其实际上代表一个层次结构,从顶部开始到层次结构的底部。我想这样做的原因是,因为我想计算树的高度。为此,首先我需要构建树。我已经知道如何使用treelib package 构建树。我现在的问题是,如果我有一个包含数千行的大型数据集,我如何以能够构建树的方式对数据进行排序。
我已经尝试过使用 pandas 中的 .sort_values 按子列中的值对父列进行排序。然而,这并没有按照我想要的方式工作。我还尝试通过函数分组来执行此操作,并根据以下问题以某种方式为行赋予一定的等级:pandas sort a column by values in another column。
这不适用于大型数据集。
下面是我想要得到的结果。
Child Parent
273500 273500 # The first row is the parent row
20574624 273500 # I want all children that belong to this parent node
1879450 20574624 #
18441258 20574624
19770000 20574624
19931554 20574624
20631784 20574624
20637582 20574624
20840426 20574624
20844632 20574624
20934910 20574624
20965442 20574624
21193122 20574624
2202652 1879450 # Now, I want all the children that belong to 1879450
18382902 1879450 # and so on
19780666 1879450
19933526 1879450
18352628 19770000
18000796 18352628
19681810 18352628
1359996 20574624
21194666 21193122
对于这么小的数据集,可以很容易地手动订购。但是对于包含数千行的大型数据集,这可能有点麻烦。
【问题讨论】:
-
df.sort_values(["Parent", "Child"])? -
@politicalscientist:你的评论比我快 4 秒 :)。我删除了我的
-
在这个具体的例子中,这个解决方案可以工作,但一般来说,如果有一个更大的数据集,其中数字不是从树级别到树级别的升序,那么它就行不通.我会想一个更大的例子来说明这一点。不幸的是,我无法上传更大的数据集。