需要根据父任务对任务进行排序

2024-10-04 05:23:30 发布

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

需要对任务进行排序,这样,一旦任务的父级被列出,它就应该按顺序出现。它可以用有向无环图(DAG)来表示

在这个例子中, 主要问题是: “13 ifhj 5,4,9,15”应该总是在5,4,9和15之后,但是13在15之前。你知道吗

我提供样本输入和预期输出。你知道吗

输入/输出:

task_no    t_name     Parent_Task_Numbers
    1       task1       0
    2       task2       0
    3       task3       0
    4       task4       1,2
    5       task5       0
    6       task6       2
    7       task7       4
    8       task8       6,1,4
    9       task9       10
    10      task10      1
    11      task11      2
    12      task12      3
    13      task13      5,4,9,15
    15      task15      7,8,2,10

预期o/p:(这可能与此不同,但应遵循主要思想)

task_no    t_name     Parent_Task_Numbers
    1       task1       0
    2       task2       0
    3       task3       0
    5       task5       0
    10      task10      1
    4       task4       1,2
    9       task9       10
    6       task6       2
    11      task11      2
    12      task12      3
    7       task7       4
    15      task15      7,8,2,10
    13      task13      5,4,9,15
    8       task8       6,1,4

def sort_parent_tasks1(fileName):
    df1 = pd.read_csv(fileName)
    print("df1.Parent_Task_Numbers.str.split(',')", type(df1.Parent_Task_Numbers.str.split(',')))
    df1.Parent_Task_Numbers.str.split(',').apply(sorted, reverse = True).str.join(',').str.strip(',')
    df3 = df1.sort_values(['Parent_Task_Numbers'])
    df3.to_csv("/fileData/task_files/output/test_generated1.csv")


inputFile = "/fileData/task_files/input/test.csv"
sort_parent_tasks1(inputFile)

我得到的是:哪个是错的。你知道吗

tasknumber    taskname    Parent_Task_Numbers
1       task1       0
2       task2       0
3       task3       0
5       task5       0
10      task10      1
4       task4       1,2
9       task9       10
6       task6       2
11      task11      2
12      task12      3
7       task7       4
13      task13      5,4,9,15
8       task8       6,1,4
15      task15      7,8,2,1

Tags: csvtaskparentdf1task1numbersstrtask2
1条回答
网友
1楼 · 发布于 2024-10-04 05:23:30

https://ipython.org/ipython-doc/dev/parallel/dag_dependencies.html获取输入

import networkx as nx
import matplotlib.pyplot as plt
import pandas as pd



def create_DAG(abs_file = "input.csv"):
    G2 = nx.DiGraph()
    df1 = pd.read_csv(abs_file)
    print(df1)

    for index, row in df1.iterrows():
        print("row['tasknumber']" , row['tasknumber'], "row['Parent_Task_Numbers']", row['Parent_Task_Numbers'])
        parents = row['Parent_Task_Numbers'].split(",")
        for p in parents:
            G2.add_edge(int(p), int(row['tasknumber']))

    nodes = df1["tasknumber"].tolist()
    map(G2.add_node, nodes)

    for item in nodes:
            print("successors of {} is {}".format(item, list(G2.successors(item))))

    # now draw the graph:
    nx.draw(G2, with_labels=True, edge_color='r')
    plt.show()
    print("graph printed ")

    return G2


G2 = create_DAG()

order = nx.topological_sort(G2)
print("order :", order)
abs_file = "input.csv"
df2 = pd.read_csv(abs_file)
df3 = pd.DataFrame(columns=df2.columns)

for task in order:
    row1 = df2.loc[df2['tasknumber'] == task]
    df3 = df3.append(row1, ignore_index=True)


print("rearranged data frame is : ", df3)

相关问题 更多 >