过滤连接来自不同 类 的节点的边
Filter edges that connect nodes from different classes
数据集,形式为
Source Target Source_Class Target_Class
1 2 1 0
1 3 1 0
2 1 0 1
4 2 0 0
5 4 0 0
5 1 0 1
3 1 0 1
用于构建网络,其中Source_Class是Source的属性,Target_Class是Target的属性。
我需要找到 link 两个具有不同 classes 的节点的边,例如 1(具有 class 1)和 2(具有 class 0); 1 和 3,依此类推,即网络中 'connectors' 的边列表,因为它们 link 两个节点具有不同的 classes.
写成上面的样子,问题好像很容易解决,但是我有一个问题就是如何只考虑Source/Target个节点一次。例如,我可以使用逻辑和和 select 仅在 Source_Class(Target_Class) 中具有 0(1) 且在 Target_Class 中具有 1(0) 的行(Source_Class).但是,考虑到网络是无向的,我会有重复。
Source Target Source_Class Target_Class
1 2 1 0
1 3 1 0
2 1 0 1
5 1 0 1
3 1 0 1
我的预期输出是:
Source Target Different
1 2 1
1 3 1
5 1 1
你知道如何过滤掉重复项吗?
使用 np.sort
来排序 Source/Target
对,然后你可以对其进行分组:
a = np.sort(df[['Source', 'Target']], axis=1)
(df.groupby([a[:,0], a[:,1]]).head(1)
.reset_index(drop=True)
.query('Source_Class != Target_Class')
)
输出:
Source Target Source_Class Target_Class
0 1 2 1 0
1 1 3 1 0
4 5 1 0 1
数据集,形式为
Source Target Source_Class Target_Class
1 2 1 0
1 3 1 0
2 1 0 1
4 2 0 0
5 4 0 0
5 1 0 1
3 1 0 1
用于构建网络,其中Source_Class是Source的属性,Target_Class是Target的属性。 我需要找到 link 两个具有不同 classes 的节点的边,例如 1(具有 class 1)和 2(具有 class 0); 1 和 3,依此类推,即网络中 'connectors' 的边列表,因为它们 link 两个节点具有不同的 classes.
写成上面的样子,问题好像很容易解决,但是我有一个问题就是如何只考虑Source/Target个节点一次。例如,我可以使用逻辑和和 select 仅在 Source_Class(Target_Class) 中具有 0(1) 且在 Target_Class 中具有 1(0) 的行(Source_Class).但是,考虑到网络是无向的,我会有重复。
Source Target Source_Class Target_Class
1 2 1 0
1 3 1 0
2 1 0 1
5 1 0 1
3 1 0 1
我的预期输出是:
Source Target Different
1 2 1
1 3 1
5 1 1
你知道如何过滤掉重复项吗?
使用 np.sort
来排序 Source/Target
对,然后你可以对其进行分组:
a = np.sort(df[['Source', 'Target']], axis=1)
(df.groupby([a[:,0], a[:,1]]).head(1)
.reset_index(drop=True)
.query('Source_Class != Target_Class')
)
输出:
Source Target Source_Class Target_Class
0 1 2 1 0
1 1 3 1 0
4 5 1 0 1