我最近一直在使用NetworkX库,我正试图从逗号分隔的Excel列中添加多个in节点(前置任务)。
对于节点F10,前导是F07、F09和F05。
Process
Predecessor
我正在阅读列并使用 *from_panda_edgelist * 创建节点和边。
g = nx.DiGraph()
g = nx.from_pandas_edgelist(df1, 'Process Step', 'Predecessors',
create_using=nx.DiGraph())
[('F00', 'F01'), ('F01', 'F02'), ('F02', 'F03'), ('F03', 'F04'), ('F03', 'F06'), ('F03', 'F08'), ('F04', 'F05'), ('F06', 'F07'), ('F08', 'F09'), ('F05,F07,F09', 'F10'), ('F10', 'F11')]
以这种方式读取不会为F10创建单独的节点,但它们将输入节点视为单个节点,从而生成此图。
Resulting graph
我想获取F05、F07、F09到F10的各个连接。
以前有没有人遇到过这个问题?我试过其他表示节点的格式,仍然不起作用。
1条答案
按热度按时间gzszwxb41#
若要从项目列表创建多行,可以使用
Pandas
explode方法。但是,从外观上看,
Predecessor
列中的项并不像列表那样格式化,因此首先需要将它们转换为列表。为此,您可以使用str.split方法,该方法将根据指定的分隔符将字符串分隔为列表。在您的示例中,分隔符是逗号,它将
F05,F07,F09
分隔为['F05', 'F07', 'F09']
。因此,对于您的示例,下面的代码应该有效:
生成的 Dataframe 如下所示(不清楚'Predecessor'列的第一行是什么,所以它变成了
NaN
):现在,运行
g = nx.from_pandas_edgelist(df1, 'Process', 'Predecessor', create_using = nx.DiGraph()
应该会按照您期望的方式工作。