- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个表示公司层次结构树的大型数据集。举个例子,我可能有如下内容:
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 包
构建树。我现在的问题是,如果我有一个包含数千行的大型数据集,我如何才能以能够构建树的方式对数据进行排序。
我已经尝试过使用 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
对于这么小的数据集,可以轻松地手动排序。但是对于包含数千行的大型数据集,这可能有点麻烦。
最佳答案
如果我没理解错你想要的是topological sort , 我建议你使用 networkx 中实现的那个:
edges = df[df.child != df.parent].reset_index()
dg = nx.from_pandas_edgelist(edges, source='parent', target='child', create_using=nx.DiGraph)
order = list(nx.lexicographical_topological_sort(dg))
result = df.set_index('parent').loc[order, :].dropna().reset_index()
print(result)
输出
parent child
0 273500 273500.0
1 273500 20574624.0
2 20574624 1359996.0
3 20574624 1879450.0
4 20574624 18441258.0
5 20574624 20637582.0
6 20574624 20840426.0
7 20574624 20844632.0
8 20574624 20934910.0
9 20574624 20965442.0
10 20574624 21193122.0
11 20574624 19770000.0
12 20574624 19931554.0
13 20574624 20631784.0
14 1879450 2202652.0
15 1879450 19933526.0
16 1879450 18382902.0
17 1879450 19780666.0
18 19770000 18352628.0
19 18352628 18000796.0
20 18352628 19681810.0
21 21193122 21194666.0
如果你想保持列的顺序 (['child', 'parent'])
只需这样做:
result = df.set_index('parent').loc[order, :].dropna().reset_index().reindex(['child', 'parent'], axis=1)
确保导入所需的库:
import networkx as nx
import pandas as pd
关于python - 对列进行排序,使一列位于另一列的值之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58251758/
我正在使用 javascript 并有以下类: const Product = require('../models').Product class ProductService { cons
我正在开发一个简单的应用程序,宠物用户可以在其中创建关于他们宠物的板并在板上显示图片。 我正在尝试创建一个功能,用户可以点击他们的图板,将他们重定向到他们的图板,该图板将显示他们所有的宠物图片。 当我
我有这样的事情:循环遍历 ids,并对每个 ids 向服务器(同一域)发出 ajax 请求 (async:true) 并将接收到的数据附加到 DOM 元素。这不是一项艰巨的任务,它确实有效。示例代码:
我正在尝试使用 Pillow 在我的网络应用程序中添加用户可上传的图像。我创建了一个 Django Upload 模型并将其注册到 Admin 中。当我使用管理控制台添加照片后,我收到以下错误。最初该
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
说到 UINavigationBar 时我有点困惑。我以编程方式设置它,它的作用是将我的 viewController 向下推(因此在启动应用程序后看不到 Storyboard中看到的 View 底部
我有以下查询,它可以满足我的要求,并显示从出生日期转换而来的人们的年龄。但我现在想通过说大于或小于这些年龄来缩小结果范围,但我不知道该怎么做。 SELECT u.`id` as `user_id`
我有一个 ListView (不是 recyclerView),其中每一行都有一个按钮、几个 TextView 和一个 EditText。单击特定按钮(“editTremp”)后,我希望 EditTe
我的 cellAtIndexPath 中有一个查询。正如常见的那样,此查询从单元格行索引处的数组中获取对象。我想知道每次加载 tableView 时是否只有一个查询,还是将其算作每个 indexPat
我目前正在探索 http://www.ecovivo.be/rubriek/food 上使用的模板中的错误. 问题:访问该链接时,您会注意到右侧有一个带有内容的大型 float 图像。现在一切正常。但
我在 ViewController 之间通过引用传递特定模型的数组。 如果我更改数组中特定元素的任何值,它会在所有 ViewController 中很好地反射(reflect),但是当我从该数组中删除
svg 包含更多元素,其中之一是下拉选择器。我遇到的问题是选择器只能在其顶部边缘被点击,而不能在选择器的其他任何地方被点击。 选择器称为 yp-date-range-selector。在下一张图片中,
我的元素使用 20 行 20 列的 css 网格布局(每个单元格占屏幕的 5%)。其中一个页面有一个按钮。最初该页面包含在网格第 5-8 列和网格第 6-9 行中,按钮本身没有问题,但我需要将其居中放
我想使用 CSS Trick 使图像居中.但是如果图像大小是随机的(不固定的)怎么办。令人惊讶的是,我不想保持图像响应,我想在不改变其宽度或高度(实际像素)的情况下将图像置于中心。 下面是我的代码:
我正在尝试在网址之间进行路由。产品是一个类: from django.db import models from django.urls import reverse # Create your mo
我正在通过查看 Django 教程来制作网站。我收到一个错误: NoReverseMatch at /polls/ Reverse for 'index' with no arguments not
我一直在试用 Django 教程 Django Tutorial Page 3并遇到了这个错误 "TemplateDoesNotExist at /polls/ " . 我假设问题出在我的代码指向模板
我有一个应用程序,其中大部分图像资源都存储在单独的资源包中(这样做是有正当理由的)。这个资源包与主应用程序包一起添加到项目中,当我在 Interface Builder 中设计我的 NIB 时,所有这
我使用 Xcode 6.3.2 开发了一个 iPad 应用程序。我将我的应用程序提交到 App Store 进行审核,但由于崩溃而被拒绝。以下是来自 iTunes 的崩溃报告。 Incident Id
我正在使用以下内容来显示水平滚动条: CSS: div { width: 300px; overflow-x: scroll; } div::-webkit-scrollbar {
我是一名优秀的程序员,十分优秀!