<h2>一个选项是生成缺少的行和列</h2>
<p>(我对实现这一点的矢量化方法很好奇,所以我问<a href="https://stackoverflow.com/questions/59874966/vectorised-method-to-append-dataframe-rows-to-columns-and-vice-versa">this question</a>哪一个答案提供了这种方法。)</p>
<pre><code>df = pd.DataFrame({'skill_1': {'job_1': 1, 'job_2': 0, 'job_3': 1},
'skill_2': {'job_1': 0, 'job_2': 0, 'job_3': 1}})
edges = df.columns
for i in df.index:
df[i] = [0 for _ in range(len(df.index))]
for e in edges:
df = df.append(pd.Series({c:0 for c in df.columns},name=e))
</code></pre>
<p>这给了我们:</p>
<pre><code>>>> df
skill_1 skill_2 job_1 job_2 job_3
job_1 1 0 0 0 0
job_2 0 0 0 0 0
job_3 1 1 0 0 0
skill_1 0 0 0 0 0
skill_2 0 0 0 0 0
</code></pre>
<p>然后我们可以使用<code>nx.from_pandas_adjacency</code>读入networkx(假设您需要一个有向图)</p>
<pre><code>G = nx.from_pandas_adjacency(df, create_using=nx.DiGraph)
</code></pre>
<h2>或者,我们可以使用df.stack()</h2>
<pre><code>df = pd.DataFrame({'skill_1': {'job_1': 1, 'job_2': 0, 'job_3': 1},
'skill_2': {'job_1': 0, 'job_2': 0, 'job_3': 1}})
G = nx.DiGraph()
for x,y in df.stack().reset_index().iterrows():
G.add_node(y['level_0'])
G.add_node(y['level_1'])
if y[0]:
G.add_edge(y['level_0'], y['level_1'])
</code></pre>