python - 从多列中分配唯一值(允许值)
问题描述
我正在努力为多个允许值(其他列)中的列/索引分配唯一值。例如:
所以我会将顶点 4 或 2 分配给边 0,将顶点 1 或 2 分配给边 1,等等。但是,每条边都应该有一个唯一的顶点分配给它们!
因此,如果我采用 edge0 = vertex4, edge1 = vertex1, edge2 = vertex3, ... 那么 edge3 只能在顶点 1 或 4 之间进行选择,这已经被其他边之一采用。
在这种情况下,edge0 = vertex2、edge1 = vertex1、edge2 = vertex3 和 edge3 = vertex4,可以工作!
最后仍然会有组合会留下没有唯一顶点的“边缘”,但是这个边缘应该只是得到一个 NaN 值左右。
在此先感谢您的帮助!
干杯,格伦
解决方案
必须有一个更优雅的解决方案,但这至少可以解决问题..
u1 = set(df["Vertex1"])
u2 = set(df["Vertex2"])
sd = u1.symmetric_difference(u2)
ist = u1.intersection(u2)
edge = {}
for i, v in enumerate(df.index):
vert1 = df["Vertex1"].iloc[i]
vert2 = df["Vertex2"].iloc[i]
if vert1 in sd:
edge[v] = vert1
sd.discard(vert1)
elif vert2 in sd:
edge[v] = vert2
sd.discard(vert2)
elif vert1 in ist:
edge[v] = vert1
ist.discard(vert1)
elif vert2 in ist:
edge[v] = vert2
ist.discard(vert2)
else:
edge[v] = math.nan
print(edge)
#{0: 2, 1: 1, 2: 3, 3: 4}
推荐阅读
- qt3d - 检测 3D 对象上的触摸,除了鼠标点击
- python-2.7 - (Python 模块序列号)没有名为 utility.compatibility 的模块
- ios - 以编程方式检查核心数据持久存储是否包含记录(Objective-c)
- python - 如何处理多公司产品的网站订单中的税收?
- c# - ASP.NET-MVC 不呈现视图
- node.js - 由于 nodejs 错误,Docker 容器未启动
- spring-mvc - 如何忽略百里香中的特定字段?
- html - 选择父母和孩子以找到跨度
- sql - 简单解析后扩展 tsquery
- spring-boot - 没有为 id "null" 映射 PasswordEncoder