用Python将一个表格转换成另一个表格

4

原始表格

A        B 
-----------
1        2
1        4
2        3
3        5
3        6
2        7
5        100
6        100
7        100
4        100

我想要生成的表格

1     2     3     5     100
1     2     3     6     100
1     2     7    100    NAN
1     4    100   NAN    NAN

你好!我正在尝试使用Python从数据集中创建一棵树(参见原始表)。这里有关系-1映射到2,2映射到3,3映射到5,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)

1
A 和列 B 代表什么意思?你是如何生成 df1 到 df2 的?为什么在 df2 中有四个 1,而在 df1 中只有两个 1 - Ynjxsjmh
1个回答

1
您可以使用一个递归生成函数:
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接