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/