从多列熊猫数据框中构建networkx有向图或流程图

时间:2018-11-20 09:08:31

标签: python pandas dataframe networkx directed-graph

我有由10列组成的pandas数据框。

  • 每行包括用户执行的联机步骤。一共有10列,所以所有10步过程
  • 让我们说第一个活动是预订机票,所以要采取的步骤是 登录网站->给src dest时间->选择座位->付费-查看

enter image description here

因此每个步骤都可能发生各种排列,我想从所有数据集中绘制一个有向图。

当前networkx在

中仅支持2列
$context = array(
  'http' => array(
    'proxy' => 'proxy.domain:3128',
    'request_fulluri' => true,
  ),
);
$cxContext = stream_context_create($context);
$sFile = file_get_contents("http://static.cricinfo.com/rss/livescores.xml", False, $cxContext);
$xml = simplexml_load_string ( $sFile."" );

有人可以告诉我如何针对两列以上的有向图进行计算

1 个答案:

答案 0 :(得分:1)

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

结果:

Resulting graph