gpt4 book ai didi

python - 从 python 数据框的列构造二分图

转载 作者:太空宇宙 更新时间:2023-11-03 13:15:44 24 4
gpt4 key购买 nike

我有一个包含三列的数据框。

data['subdomain'],  data['domain'], data ['IP']

我想为子域的每个元素构建一个二分图对应同一个域,权重为它出现的次数对应。

例如我的数据可能是:

subdomain , domain, IP
test1, example.org, 10.20.30.40
something, site.com, 30.50.70.90
test2, example.org, 10.20.30.41
test3, example.org, 10.20.30.42
else, website.com, 90.80.70.10

我想要一个二分图,说明 example.org 的权重为 3上面有 3 个边等等。我想将这些结果组合成一个新的数据框。

我一直在尝试使用 networkX 但我没有经验,尤其是在需要计算边缘时。

B=nx.Graph()
B.add_nodes_from(data['subdomain'],bipartite=0)
B.add_nodes_from(data['domain'],bipartite=1)
B.add_edges_from (...)

最佳答案

你可以使用

B.add_weighted_edges_from(
[(row['domain'], row['subdomain'], 1) for idx, row in df.iterrows()],
weight='weight')

添加加权边,或者你可以使用

B.add_edges_from(
[(row['domain'], row['subdomain']) for idx, row in df.iterrows()])

添加没有权重的边。

您可能不需要权重,因为节点度数是相邻边的数量到那个节点。例如,

>>> B.degree('example.org')
3

import pandas as pd
import networkx as nx
import matplotlib.pyplot as plt

df = pd.DataFrame(
{'IP': ['10.20.30.40',
'30.50.70.90',
'10.20.30.41',
'10.20.30.42',
'90.80.70.10'],
'domain': ['example.org',
'site.com',
'example.org',
'example.org',
'website.com'],
'subdomain': ['test1', 'something', 'test2', 'test3', 'else']})

B = nx.Graph()
B.add_nodes_from(df['subdomain'], bipartite=0)
B.add_nodes_from(df['domain'], bipartite=1)
B.add_weighted_edges_from(
[(row['domain'], row['subdomain'], 1) for idx, row in df.iterrows()],
weight='weight')

print(B.edges(data=True))
# [('test1', 'example.org', {'weight': 1}), ('test3', 'example.org', {'weight': 1}), ('test2', 'example.org', {'weight': 1}), ('website.com', 'else', {'weight': 1}), ('site.com', 'something', {'weight': 1})]

pos = {node:[0, i] for i,node in enumerate(df['domain'])}
pos.update({node:[1, i] for i,node in enumerate(df['subdomain'])})
nx.draw(B, pos, with_labels=False)
for p in pos: # raise text positions
pos[p][1] += 0.25
nx.draw_networkx_labels(B, pos)

plt.show()

产量 enter image description here


关于python - 从 python 数据框的列构造二分图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30850688/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com