首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将Pd数据帧转换为2模式/二分网络x图

将Pd数据帧转换为2模式/二分网络x图
EN

Stack Overflow用户
提问于 2020-03-22 00:24:42
回答 1查看 339关注 0票数 1

希望你身体健康!

我正在尝试将下面的数据矩阵转换为二分网络图-其中有两种类型的节点,用户和应用程序。

此外,我希望使用加权边来指示使用频率,并使用值来指示每个应用程序建立的新连接的数量,但就目前而言,任何连接边和节点的简单图形的帮助都会很好!

当前数据帧-

代码语言:javascript
运行
复制
df.head(10)
Out[20]: 
  Unnamed: 0  Airbnb  Peerby  ...  Marktplaats  Together  Snappcar
0      James       1       1  ...            0         1         0
1     Andrew       1       0  ...            0         0         1
2      Sarah       1       0  ...            0         1         0
3       Nick       0       1  ...            1         0         1
4       Mary       0       0  ...            0         0         0
5      Julia       1       1  ...            1         0         1
6      Steve       0       0  ...            0         1         1
7       Mike       1       0  ...            1         0         1 

[8 rows x 9 columns]

现在我要结束了,但不确定如何填充适当的源和目标,或者如何使用包含两种节点的图--

代码语言:javascript
运行
复制
import networkx as nx
import matplotlib.pyplot as plt 
import pandas as pd


#Importing data

df = pd.read_csv("P2P Trial 1.csv")



edges = pd.DataFrame({'source' : [],
                      'target' : [],
                      'weight' : []})

nodes = pd.DataFrame({'node' : [''],
                      'name' : [''],
                      'Apps' : ['']})

G = nx.from_pandas_dataframe(edges, 'source', 'target', 'weight')

我知道我还有很长的路要走,但我只是在努力学习,让事情继续下去。

非常感谢任何帮助,或指出正确的方向!:)

学习资源的链接也很受欢迎:)!

EN

回答 1

Stack Overflow用户

发布于 2020-03-22 00:37:51

假设下面的DataFrame (您的一个示例,注意第一列是未命名的):

代码语言:javascript
运行
复制
  Unnamed  Airbnb  Peerby  Marktplaats  Together  Snappcar
0   James       1       1            0         1         0
1  Andrew       1       0            0         0         1
2   Sarah       1       0            0         1         0
3    Nick       0       1            1         0         1
4    Mary       0       0            0         0         0
5   Julia       1       1            1         0         1
6   Steve       0       0            0         1         1
7    Mike       1       0            1         0         1

您可以执行以下操作:

代码语言:javascript
运行
复制
# the trick is to use melt to transform the graph into (source, target) format
result = df.melt(id_vars='Unnamed')

# only select columns with 1
filtered = result[result['value'] == 1].rename(columns={'Unnamed': 'source', 'variable': 'target'})

G = nx.from_pandas_edgelist(filtered)

for edge in G.edges:
    print(edge)

输出

代码语言:javascript
运行
复制
('James', 'Airbnb')
('James', 'Peerby')
('James', 'Together')
('Airbnb', 'Andrew')
('Airbnb', 'Sarah')
('Airbnb', 'Julia')
('Airbnb', 'Mike')
('Andrew', 'Snappcar')
('Sarah', 'Together')
('Julia', 'Peerby')
('Julia', 'Marktplaats')
('Julia', 'Snappcar')
('Mike', 'Marktplaats')
('Mike', 'Snappcar')
('Peerby', 'Nick')
('Nick', 'Marktplaats')
('Nick', 'Snappcar')
('Together', 'Steve')
('Steve', 'Snappcar')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60790279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档