我正在處理一個問題,我必須將相關的項目分組併爲其分配唯一的標識。我用python編寫了代碼,但它沒有返回預期的輸出。我需要幫助來完善我的邏輯。代碼如下:爲組創建唯一標識
data = {}
child_list = []
for index, row in df.iterrows():
parent = row['source']
child = row['target']
#print 'Parent: ', parent
#print 'Child:', child
child_list.append(child)
#print child_list
if parent not in data.keys():
data[parent] = []
if parent != child:
data[parent].append(child)
#print data
op = {}
gid = 0
def recursive(op,x,gid):
if x in data.keys() and data[x] != []:
for x_child in data[x]:
if x_child in data.keys():
op[x_child] = gid
recursive(op,x_child,gid)
else:
op[x] = gid
else:
op[x] = gid
for key in data.keys():
#print "Key: ", key
if key not in child_list:
gid = gid + 1
op[key] = gid
for x in data[key]:
op[x] = gid
recursive(op,x,gid)
related = pd.DataFrame({'items':op.keys(),
'uniq_group_id': op.values()})
mapped.sort_values('items')
實例下
Input:
source target
a b
b c
c c
c d
d d
e f
a d
h a
i f
Desired Output:
item uniq_group_id
a 1
b 1
c 1
d 1
h 1
e 2
f 2
i 2
我的代碼給我下面這是錯誤的輸出。
item uniq_group_id
a 3
b 3
c 3
d 3
e 1
f 2
h 3
i 2
另一個實施例
Input:
df = pd.DataFrame({'source': ['a','b','c','c','d','e','a','h','i','a'],
'target':['b','c','c','d','d','f','d','a','f','a']})
Desired Output:
item uniq_group_id
a 1
b 1
c 1
d 1
e 2
f 2
My code Output:
item uniq_group_id
e 1
f 1
行或組ID無關緊要的順序。這裏重要的是分配相關項目相同的唯一標識符。整個問題是找到相關的項目組併爲其分配唯一的組ID。
謝謝。這個邏輯對我的用例來說工作正常。 – Sam