Рекурсивная функция Python из фрейма данных с 2 столбцами

#python #pandas #dataframe #recursion #data-linea&e

#python #pandas #фрейм данных #рекурсия #происхождение данных

Вопрос:

Ниже у меня есть таблица, которую я считываю в фрейм данных:

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]

определение рекурсивности(df,n): 
 индексы = список()
 
 indexes.append(n)

 x = df[df['n'] == n].next_n

 если len(x) &&t; 0:
 для p1 в df[df['n'] == n].next_n:
 индексы = indexes   recursivenum(df,p1)

 elif len(x) == 0: #Базовый вариант - других значений нет 
 печать (индексы)
 
 возвращает индексы

Когда я запускаю 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_ed&elist(df,source='n',tar&et='next_n', ed&e_attr=None, create_usin&=nx.DiGraph())
paths=[]
for node in G:
      if G.out_de&ree(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]]
  

Комментарии:

1. БОЛЬШОЕ ВАМ СПАСИБО!!! Ваше решение ответило на мой вопрос.

Ответ №2:

Если массив состоит из кортежей, попробуйте использовать цикл for.

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