从Pandas DataFrame的多个列构建networkx有向图或流程图。

5
我有一个Pandas数据框,其中包含10个列。
  • 每一行表示一个用户在网上执行的步骤。总共有10个列,因此涉及到了一个由10个步骤组成的过程
  • 假设第一个活动是预订机票,那么步骤是: 登录网站-->输入起始地点和目的地、时间-->选择座位-->支付-->审查

enter image description here

所以,在每一步中都可能出现各种排列组合,我想从整个数据集中绘制一个有向图。

目前,networkx仅支持两列。

# libraries
import pandas as pd
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt

# Build your graph
G=nx.from_pandas_dataframe(df, 'src', 'dest',create_using=nx.DiGraph())

# Plot it
nx.draw(G, with_labels=True)
plt.show()

有人能告诉我如何为超过两列的定向图执行此操作吗?

1个回答

4

networkx中的from_pandas_dataframe使用了add_edges_from,你可以做类似的事情:

# libraries
import pandas as pd
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt

# Build your graph

df = pd.DataFrame(np.random.randn(2,4),columns=list('ABCD')) #Create a 4 column data frame

columns = list(df.columns.values)# Get columns name

g = nx.empty_graph(0, nx.DiGraph()) #initialize an empty graph

for i in range(len(columns)-1):
    g.add_edges_from(zip(df[columns[i]], df[columns[i+1]])) #Create edge between 2 values, between all consecutive coumns

# Plot it
nx.draw(g, with_labels=True)
plt.show()

以下是结果:

结果图表


1
非常棒的答案!有没有办法以类似的方式连接不同的行呢?例如,如果一行中一个列的值与另一行中相同(或另一个)列的值匹配,则使用某个列作为标签将这两行链接在一起?谢谢。 - Bowen Liu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接