我在一个项目中工作,我的任务是识别通过4个ID连接的组。例如:
在本例中,第一个元素是一个组,因为它的id与列表中的任何其他id都不匹配。第二个和第三个元素创建第二个组,因为它们至少有一个id是匹配的。你知道吗
我最初的想法是通过连接4个ID来创建唯一的ID,然后将它们与dict中已经存在的值进行比较,如果至少存在部分匹配,则将其附加到相应的键值对,否则使用新的键值对更新dict,包括相应的唯一ID。代码:
import pandas as pd
d = {"ID_1" : [7900584388, 7993236875, 7993236875],
"ID_2" : ["CML00500006425034016", "CML00500006405019019",
"CML00500006405019025"],
"ID_3" : [2010007625, 2010007633, 2010007633],
"ID_4" : [1016008787, 1016008794, 1016008794]}
df = pd.DataFrame(d, dtype = str).dropna()
group_dict = {"foo":["1_1_1_1"]}
df["UID"] = df["ID_1"] + "_" + df["ID_2"] + "_" + df["ID_3"] + "_" + df["ID_4"]
UID = list(df["UID"])
for i in UID:
i_split = i.split("_")
for k, v in group_dict.items():
x = 0
c = 0
for d in v:
d_split = d.split("_")
print(d_split)
if len(set(i_split) & set(d_split)) > 0:
x += 1
if x > 0:
group_dict[k].append(i)
else:
group_dict.update({c:[i]})
c += 1
基于三要素示例的预期结果将是:
{'foo': ['1_1_1_1'], 0: ['7900584388_CML00500006425034016_2010007625_1016008787'], 1: ['7993236875_CML00500006405019019_2010007633_1016008794', '7993236875_CML00500006405019025_2010007633_1016008794']}
不幸的是,这个解决方案出现了运行时错误,因为字典大小在迭代过程中会发生变化。你能给我推荐一下,如何让这段代码工作,或者是一种解决分组问题的替代方法吗?感谢您提前反馈!你知道吗
您可以在一个集合中收集相关索引:
你可以用它做任何事,例如:
相关问题 更多 >
编程相关推荐