获取pandas数据框中子节点的所有直接中间和最终父节点

2024-03-28

我的数据框具有父子关系,如下所示:

**child                Parent              relationship**

   A1x2                 bc11                direct_parent
   bc11                 Aw00                direct_parent
   bc11                 Aw00                ultimate_parent
   Aee1                 Aee0                direct_parent
   Aee1                 Aee0                ultimate_parent

我想获取新数据框中所有子节点的所有祖先。结果看起来像这样:

node                   ancesstory_tree

A1x2                    [A1x2,bc11,Aw00]   
Aee1                    [Aee1,Aee0]

注意:真实数据集在子节点和最终父节点之间可能有很多直接前驱节点。


另一种方法,使用from_pandas_edgelist https://networkx.github.io/documentation/stable/reference/generated/networkx.convert_matrix.from_pandas_edgelist.html and ancestors https://networkx.github.io/documentation/networkx-1.9/reference/generated/networkx.algorithms.dag.ancestors.html来自networkx https://networkx.github.io/documentation/latest/包裹:

import networkx as nx

# Create the Directed Graph
G = nx.from_pandas_edgelist(df,
                            source='Parent',
                            target='child',
                            create_using=nx.DiGraph())

# Create dict of nodes and ancestors
ancestors = {n: {n} | nx.ancestors(G, n) for n in df['child'].unique()}

# Convert dict back to DataFrame if necessary
df_ancestors = pd.DataFrame([(k, list(v)) for k, v in ancestors.items()],
                            columns=['node', 'ancestry_tree'])

print(df_ancestors)

[out]

   node       ancestry_tree
0  A1x2  [A1x2, Aw00, bc11]
1  bc11        [bc11, Aw00]
2  Aee1        [Aee1, Aee0]

要从输出表中过滤掉“中间的孩子”,您可以仅使用out_degree https://networkx.github.io/documentation/stable/reference/classes/generated/networkx.DiGraph.out_degree.html方法 - 最后一个孩子应该有一个 out_ Degree== 0

last_children = [n for n, d in G.out_degree() if d == 0]

ancestors = {n: {n} | nx.ancestors(G, n) for n in last_children}

df_ancestors = pd.DataFrame([(k, list(v)) for k, v in ancestors.items()],
                            columns=['node', 'ancestry_tree'])

[out]

   node       ancestry_tree
0  A1x2  [A1x2, Aw00, bc11]
1  Aee1        [Aee1, Aee0]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取pandas数据框中子节点的所有直接中间和最终父节点 的相关文章

随机推荐

  • 布尔逻辑设计 - 归约

    我有以下功能需要减少 简化 F A B C D BC A C D 其中 表示补集 Here s my solution BC A C D BC A C D BC A C D BC C A D C B 1 A D C 1 A D C A D
  • 检测输入框中的粘贴

    我有一个输入框 我想使用 vbscript 或 javascript 没有 jquery 来捕获粘贴事件 使用 onpaste 事件捕获该事件并在 Javascript 中执行您需要的操作 例如 禁用输入文本字段中的粘贴
  • 当 Mac 设置(而非浏览器设置)拒绝位置共享时,HTML5 地理定位 API 会悄然失败

    我遇到了一个问题 如果我的 Mac 拒绝位置共享 那么 JS 代码中什么也不会发生 这很危险 无论如何要解决这个问题吗 如果系统拒绝位置共享 我预计会抛出异常 Running macOS Mojave 10 14 6并测试于Chrome 8
  • 检查类是否存在于文件中而不需要/包含

    有没有一种方法可以检查文件中是否存在类而不包含 需要该类 就像是 class in file file 正如我已经提到的 我知道这可以通过要求 包括课程然后查找来完成class exists class 但还有其他方法吗 tokens to
  • Java查找数组索引中的最后一个成员

    假设我有一个大小为 10 的数组 索引范围为 0 到 9 我添加了一堆元素 并在索引 6 处停止添加 因此 使用 array length 我可以知道数组的大小为 10 但是如何找到哪个索引包含最后一个值 而该索引之后为空 我应该做一个循环
  • Javascript 代码,未终止的字符串文字

    错误控制台 未终止的字符串文字 html li div class above question number Question Title div JQuery 代码是 html li li div class above questio
  • 如何获取子进程的返回码

    在windows中生成子进程获取返回值的方法是什么 看起来像ShellExecute 使用起来比原来更简单CreateProcess 但从我迄今为止所做的阅读来看 两者都没有表明如何检查生成进程的返回值 这是怎么做到的 谢谢 安迪 要获取
  • 无法在 Mac 上启动 ElasticSearch

    我安装了elasticsearch by brew install elasticsearch并开始它brew services start elasticsearch 然而 curl http 127 0 0 1 9200 shows c
  • 如何比较 python 函数的性能? [复制]

    这个问题在这里已经有答案了 我已经编写了两个函数来做完全相同的事情 但我不知道哪个更快更好 我如何比较这两个函数 看看哪一个在性能和其他方面更好 The timeit http docs python org library timeit
  • 如何保留 Spark HashingTF() 函数输入的键或索引?

    基于 1 4 的 Spark 文档 https spark apache org docs 1 4 0 mllib feature extraction html https spark apache org docs 1 4 0 mlli
  • 计算向量中所有差异的可能性

    假设我有一个短向量x a b c d e 计算向量成员之间的所有差异的最佳方法是什么 y e d e c e b e a d e d c d b d a c e c d c b c a b e b d b c b a a e a d a c
  • 您可以为 SQL 2008 查询设置默认架构吗

    我有一个名为应用程序的模式 有没有一种方法 而不是使用语法 SELECT FROM application table 我可以设置默认架构 以便我可以使用 SELECT FROM table 我想这与 using 语句的想法相同 所有 sq
  • ejabberd MAM 不适用于 MUC

    xep 0313 适用于名册 但不适用于房间聊天 我可以获取名册的存档消息 但无法获取房间的存档消息 为什么
  • 使用 scipy 应用 Sobel 过滤器

    我正在尝试在图像上应用 Sobel 滤波器以使用 scipy 检测边缘 我在 Windows 7 Ultimate 64 位 上使用 Python 3 2 64 位 和 scipy 0 9 0 目前我的代码如下 import scipy f
  • 空白而不是零

    Duration isnull FunctionA DateA DateB 上面的函数计算天数 如果 day 为空 则显示 值 0 而不是空白值 如何更改上面的代码 使其显示空白而不是 0 值 null 如果您的函数返回一个整数 则结果来自
  • Reflect.getMetadata 在 Angular2 中不起作用

    我用过这个 Reflect getMetadata annotations AppComponent 0 template 在 plunker 中它工作得很好http plnkr co edit f47uORghJXaq0FtD00Th p
  • asp.net Base-64 字符串中的无效字符

    我有一个 C 移动网站 并且在使用某些移动客户端时遇到问题 我在下面发布了一条跟踪 但基本上是手机浏览器或手机连接到互联网 url 的 wap 网关对表单中的视图状态隐藏输入进行编码 wEPDwULLTExNTMyOTcwOTBkGAEFB
  • 在 ASP Web API 中指定无效参数时返回错误

    我正在使用 C 和 ASP NET Web API 创建一个 API 并且希望它在使用无法识别的参数时返回错误 例如 api Events 应该有一个事件列表 api Events startTime startTime 应该返回在特定时间
  • “wordlist”的非数字第二个参数

    我正在 Eclipse android 中构建一个 c 项目并收到以下错误 这是 ndk 构建错误 与我的代码无关 Users eladb MyWorkspace android ndk r8e build gmsl gmsl 512 no
  • 获取pandas数据框中子节点的所有直接中间和最终父节点

    我的数据框具有父子关系 如下所示 child Parent relationship A1x2 bc11 direct parent bc11 Aw00 direct parent bc11 Aw00 ultimate parent Aee