用序列信息表示 pandas 数据帧中的流程图

Represent a process flow diagram in a pandas dataframe with sequence information

我正在尝试在 pandas 数据框中表示流程图。让我给你举个例子,假设我们有一个这样的流程图 - 流程图:-

请看图片。现在,我已经根据图像中的信息创建了 pandas 数据框 -

process name Id To Id
process 1 10 200
process 1 10 80
process 2 200 8
process 3 80 NAN
process 4 8 70
process 5 70 NAN

你们可以通过->

生成上面的数据框
df_2 = pd.DataFrame({'process name': {0: 'process 1',
  1: 'process 1',
  2: 'process 2',
  3: 'process 3',
  4: 'process 4',
  5: 'process 5'},
 'Id': {0: 10, 1: 10, 2: 200, 3: 80, 4: 8, 5: 70},
 'To Id': {0: 200, 1: 80, 2: 8, 3: None, 4: 70, 5: None}})

我想再添加一个这样的信息栏-

process name Id To Id Sequence
Start 0 10 0
process 1 10 200 1
process 1 10 80 1
process 2 200 8 2
process 3 80 NAN 2
process 4 8 70 3
process 5 70 NAN 4

在这里,我创建了一个额外的行,进程名称为 start(sequence 0),代表我的图表的开始(id =0To Id=10)。 然后序列算法检查 id 列中的 10,并且有 2 个匹配项。因此,它将这些行标记为 1 并存储 to ID 信息。 它会再次从 [200,80] 中选择 1 个“to ID”。假设 80 然后它将重复相同的过程并将以 80 开头的行标记为序列 2,这里 To Id 是 NAN 因此该过程将停止并检查 To ID 200.

有什么简单的方法可以快速添加这个序列列信息吗?有什么好的算法吗?

我可以使用 set diff 提取第一行。像这样 -

id =  set(df['Id'].to_list())
to_id = set(df['To Id'].to_list()) 
id - to_id #will give output 10 which is our start point.

从这里开始我需要帮助如何从这里实现序列列?

假设没有一个步骤有 2 个或更多父代(这是具有唯一序列标识的必要条件):

# this has to be defined *after* df_2 initialisation
def count_prev(curr) -> int:
    new = df_2.loc[df_2['To Id'].eq(curr), 'Id']
    if(len(new)>0):
        return count_prev(new.iloc[0]) + 1
    return 1
    
df_2['Sequence'] = df_2['Id'].agg(count_prev)

结果:

  process name   Id  To Id  Sequence
0    process 1   10  200.0         1
1    process 1   10   80.0         1
2    process 2  200    8.0         2
3    process 3   80    NaN         2
4    process 4    8   70.0         3
5    process 5   70    NaN         4