python - 在 Python 中从一张表转换到另一张表

标签 python pandas recursion tree

Original Table :

A        B 
-----------
1        2
1        4
2        3
3        5
3        6
2        7
5        100
6        100
7        100
4        100
Table I want to generate :
1     2     3     5     100
1     2     3     6     100
1     2     7    100    NAN
1     4    100   NAN    NAN
你好!
我正在尝试根据我拥有的数据集在 python 中创建一棵树(请参阅原始表)。这里有关系 - 1 映射到 2 映射到 3 映射到 5 映射到 100。(100 表示叶节点或树的路径的结尾,1 始终是根节点 - 所有路径都以 1 开头)我首先想要创建具有树的完整路径的数组(请参阅我想要获取的表),我尝试使用递归函数进行此操作,但它变得非常复杂。关于我如何继续的任何想法?或者,如果有一个内置函数来执行从第一个表到第二个表的转换。
(主要目标:从“原始表”到“我想生成的表”
到目前为止,我已经在这里附上了我的代码。
import pandas as pd
import numpy as np 

data = {'A':  [1, 1,2,3,3,2,1,6,5,7,4],
        'B': [2,4,3,5,6,7,100,100,100,100]
        }

df = pd.DataFrame (data, columns = ['A','B'])

print (df)

def filt(df,val):
    return df[df.A==val]

c2=1

global vec 
vec = np.array([c2])
def search(c2):
   temp_df= filt(df,c2)
   print(temp_df)
   a=temp_df[temp_df.columns[1]]
   for row in range(temp_df.shape[0]):
   
        if a.iloc[row]!=100:
            global vec 
            vec=np.append(vec,a.iloc[row])
            search(a.iloc[row])
                       
        else:
            vec=np.append(vec,a.iloc[row])
            print(vec)
            vec=vec[:-2]
 

search(c2)

最佳答案

您可以使用递归生成器函数:

import pandas as pd
t1 = [[1, 2], [1, 4], [2, 3], [3, 5], [3, 6], [2, 7], [5, 100], [6, 100], [7, 100], [4, 100]]
def get_paths(n, c = []):
  if not (v:=[b for a, b in t1 if a == n]):
     yield c + [n]
  else:
     yield from [i for b in v for i in get_paths(b, c+[n])]

m = max(map(len, r:=list(get_paths(1))))
df = pd.DataFrame([i+([None]*(m - len(i))) for i in r])
输出:
   0  1    2     3     4
0  1  2    3     5   100
1  1  2    3     6   100
2  1  2    7   100   NaN
3  1  4  100   NaN   NaN

关于python - 在 Python 中从一张表转换到另一张表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67502124/

相关文章:

python - Pandas : Abstract class 'ExcelWriter' with abstract methods instantiatedpylint python

python - 使用 scipysolve_bvp 求解边值问题(扩散 react 方程)

python - Pandas -Python : Apply() and if/then logic

python - 如何将 seaborn jointplot 轴设置为对数刻度

python - 将慢速 pandas iterrow 转换为 apply

python - 在 python 中存储 8 皇后问题板的最佳方法是什么

算法设计技术

recursion - sqlite:递归查询中的排序方式如何工作?

c - 这些是等价的吗?

python直方图单线