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

2024-05-02 16:38:56 发布

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

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

enter image description here

请看一下图片。现在,我根据图像中的信息创建了熊猫数据帧-

^{tb1}$

您可以通过->;生成上述数据帧

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}})

我想再添加一个信息列,其顺序如下-

^{tb2}$

在这里,我创建了另一行,其进程名为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 ID200

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

我可以使用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.

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


Tags: to数据算法none信息iddf过程
1条回答
网友
1楼 · 发布于 2024-05-02 16:38:56

假设没有步骤具有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

相关问题 更多 >