从数据库创建边缘列表和节点的属性列表
From a databaset, create an edgelist and node's attributes list
我有一个包含以下列和观察结果的数据集:
Source Target Label_Source Label_Target
E N 0.0 0.0
A B 1.0 1.0
A C 1.0 0.0
A D 1.0 0.0
A N 1.0 0.0
S G 0.0 0.0
S L 0.0 1.0
S C 0.0 0.0
构建数据集的人没有拆分为边缘列表和节点属性,所以现在我有兴趣创建这两个单独的数据集。
我的想法是 select 网络中的唯一节点,并在节点与其对应的标签值之间创建一个映射,请注意 Label_Source 被分配给源节点, Label_Target 被分配给目标节点。两者在网络中没有重叠(至少,不应该有)。
我的预期输出是
边缘列表(只需删除标签列):
源目标
E N
B
一个C
D
一个 N
SG
大号
SC
具有属性的节点列表:
Node Label
E 0
N 0
A 1
B 1
C 0
D 0
S 0
G 0
L 1
能否请您告诉我如何获取创建此映射的节点列表?我想一个选择是 select 来自 Source 和 Target 的不同元素,然后为每个元素查看它们在 Label_source 或目标列中的标签。
让我们尝试拆分然后 groupby
与 max
out1 = df.filter(like='Source')
out2 = df.filter(like='Target')
out1.columns = ['Node','Label']
out2.columns = ['Node','Label']
out = pd.concat([out1,out2]).groupby('Node').max().reset_index()
Node Label
0 A 1.0
1 B 1.0
2 C 0.0
3 D 0.0
4 E 0.0
5 G 0.0
6 L 1.0
7 N 0.0
8 S 0.0
尝试:
edgelist = df[['Source', 'Target']]
nodelist = pd.concat([pd.DataFrame(df.filter(like='Source').to_numpy()),
pd.DataFrame(df.filter(like='Target').to_numpy())]) \
.rename(columns={0: 'Node', 1: 'Label'}).fillna(0) \
.astype({'Label': int}).drop_duplicates().reset_index(drop=True)
输出:
>>> edgelist
Source Target
0 E N
1 A B
2 A C
3 A D
4 A N
5 S G
6 S L
7 S C
>>> nodelist
Node Label
0 E 0
1 A 1
2 S 0
3 N 0
4 B 1
5 C 0
6 D 0
7 G 0
8 L 1
我有一个包含以下列和观察结果的数据集:
Source Target Label_Source Label_Target
E N 0.0 0.0
A B 1.0 1.0
A C 1.0 0.0
A D 1.0 0.0
A N 1.0 0.0
S G 0.0 0.0
S L 0.0 1.0
S C 0.0 0.0
构建数据集的人没有拆分为边缘列表和节点属性,所以现在我有兴趣创建这两个单独的数据集。 我的想法是 select 网络中的唯一节点,并在节点与其对应的标签值之间创建一个映射,请注意 Label_Source 被分配给源节点, Label_Target 被分配给目标节点。两者在网络中没有重叠(至少,不应该有)。 我的预期输出是
边缘列表(只需删除标签列):
源目标
E N
B
一个C
D
一个 N
SG
大号
SC具有属性的节点列表:
Node Label E 0 N 0 A 1 B 1 C 0 D 0 S 0 G 0 L 1
能否请您告诉我如何获取创建此映射的节点列表?我想一个选择是 select 来自 Source 和 Target 的不同元素,然后为每个元素查看它们在 Label_source 或目标列中的标签。
让我们尝试拆分然后 groupby
与 max
out1 = df.filter(like='Source')
out2 = df.filter(like='Target')
out1.columns = ['Node','Label']
out2.columns = ['Node','Label']
out = pd.concat([out1,out2]).groupby('Node').max().reset_index()
Node Label
0 A 1.0
1 B 1.0
2 C 0.0
3 D 0.0
4 E 0.0
5 G 0.0
6 L 1.0
7 N 0.0
8 S 0.0
尝试:
edgelist = df[['Source', 'Target']]
nodelist = pd.concat([pd.DataFrame(df.filter(like='Source').to_numpy()),
pd.DataFrame(df.filter(like='Target').to_numpy())]) \
.rename(columns={0: 'Node', 1: 'Label'}).fillna(0) \
.astype({'Label': int}).drop_duplicates().reset_index(drop=True)
输出:
>>> edgelist
Source Target
0 E N
1 A B
2 A C
3 A D
4 A N
5 S G
6 S L
7 S C
>>> nodelist
Node Label
0 E 0
1 A 1
2 S 0
3 N 0
4 B 1
5 C 0
6 D 0
7 G 0
8 L 1