私は関連するアイテムをグループ化し、ユニークなIDを割り当てなければならない問題に取り組んでいます。私はPythonでコードを書いていますが、期待される出力が返っていません。私は私の論理を洗練する助けが必要です。以下のコードは次のとおりです。グループのユニークなIDを作成
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