来自 2 列数据框的 Python 递归函数

Posted

技术标签:

【中文标题】来自 2 列数据框的 Python 递归函数【英文标题】:Python Recursive Function from a 2 column Dataframe 【发布时间】:2020-11-29 13:06:00 【问题描述】:

我有下面的表格,我读入了一个数据框:

n,next_n 1,2 1,3 1,6 2,4 2,8 3,5 3,9 4,7 9,10

我的递归函数应该从末尾返回多个数字列表。 例如,如果我选择查看与 9 相关的所有值,我应该得到一个显示为 [9,10] 的列表。 另一个例子: 4 应该产生 [4,7] 3 产生两个列表 [3,5] [3,9,10]

def 递归数(df,n): 索引 = 列表() 索引.附加(n) x = df[df['n'] == n].next_n 如果 len(x) > 0: 对于 df[df['n'] == n].next_n 中的 p1: 指数 = 指数 + 递归数(df,p1) elif len(x) == 0: #Base case - 没有其他值 打印(索引) 回报指数

当我运行 recursivenum(df,1)

我明白了 [7] [8] [5] [10] [6] [1、2、4、7、8、3、5、9、10、6]

与我期望看到的相比,这算不了什么。

我希望看到五个列表: [1,2,4,7] [1,2,8] [1,3,5] [1,3,9,10] [1,6] 有人可以指出我正确的方向吗?

【问题讨论】:

【参考方案1】:

这更像是一个网络问题,你想创建有向图,然后从根 (1) 到叶(任何级别为 0 的值)

import networkx as nx
G=nx.from_pandas_edgelist(df,source='n',target='next_n', edge_attr=None, create_using=nx.DiGraph())
paths=[]
for node in G:
      if G.out_degree(node)==0: #it's a leaf
          paths.append(nx.shortest_path(G, 1, node))
          
paths
Out[42]: [[1, 6], [1, 2, 8], [1, 3, 5], [1, 2, 4, 7], [1, 3, 9, 10]]

【讨论】:

非常感谢!!!您的解决方案回答了我的问题。【参考方案2】:

如果数组由元组组成,请尝试使用 for 循环。

def recursivenum(df,n):
    indices = list()
    
    for x,y in df:
        if x == n:
            indices.append([x,y])
    
    return indices

【讨论】:

以上是关于来自 2 列数据框的 Python 递归函数的主要内容,如果未能解决你的问题,请参考以下文章

Python递归函数相关

python学习第十四天

数据结构-- 递归 排序

映射 dict(来自 rdd)以递归方式更改 Python/PySpark 中的列名

数据结构第九篇——栈与递归

Mysql8.0递归函数