将唯一的DataFrame行转换为Python中的树结构

2024-06-25 23:34:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个由独特行组成的pandas数据帧,如下所示:

df = pd.DataFrame({'O': ['O-1','O-1'],
                       'B': ['B-1','B-2'],
                       'C': ['C-1','C-2'],
                       'R': ['R-1','R-1']}, 
                       columns = ['O', 'B', 'C', 'R'])

df的列按父子线性关系排序,其中列O是级别1,列{}是级别2,依此类推。其目的是将这个df转换为一个树状结构,用于导航,如下所示:

^{pr2}$

df(作为父级)中过滤每个列的每个值,然后将右侧剩余列的所有唯一值复制为子级,这似乎是一种不好的方法。在

有没有有效的方法?在


Tags: columns数据方法目的dataframepandasdf排序
1条回答
网友
1楼 · 发布于 2024-06-25 23:34:31

正如我提到的,我们有这样的方法来实现这一点:

Filtering on each column's each value in df (as parent) then copying all unique values of remaining columns on the right as child seems like a bad way to achieve this.

同样逻辑的解决方案是:

sample = pd.DataFrame({'O': ['O-1','O-1'],
                   'B': ['B-1','B-2'],
                   'C': ['C-1','C-2'],
                   'R': ['R-1','R-1']}, columns = ['O', 'B', 'C', 'R'])

ls = []
for col in sample:
    for val in sample[col]:
        fs = sample[sample[col] == val]
        fvl = fs.iloc[:,fs.columns.get_loc(col)+1:].T.values.tolist()
        fcl = fs.iloc[:,fs.columns.get_loc(col)+1:].columns.tolist()
        for fc, fvs in zip(fcl, fvl):
            for fv in fvs:
                ls.append([val,fc,fv])

output = pd.DataFrame(ls, columns = ['PARENT', 'CHILD_TYPE', 'CHILD']).drop_duplicates()

相关问题 更多 >