У меня есть такой фрейм данных:
id near_relation
0 A [B, D]
1 B [A, H, N]
2 C [I, R]
3 D [A, E]
4 E [D, M]
5 F [J, K]
6 J [F, P]
7 P [J, S]
Я хочу собрать id
в список на основе столбца соседних отношений near_relation
.Например, A
и D
имеют соседние отношения, D
и E
имеют соседние отношения, поэтому A
и E
должны быть собраны в список.Итак, я ожидаю следующих результатов:
collect
0 [A, B, D, E]
1 [C]
2 [F, P, J]
Я могу сделать это с помощью цикла, но мой фрейм данных большой, и я хочу более элегантное решение.
Добавить циклРешение
def add(x,x_dict):
tmp_list = x.copy()
last_len = 0
while len(tmp_list)!=last_len:
current_len = len(tmp_list)
for m in tmp_list[last_len:]:
if m in x_dict.keys():
for n in x_dict[m]:
if n not in tmp_list:
tmp_list.append(n)
last_len = current_len
return set(tmp_list) & set(x_dict.keys())
df_dict = df.set_index('id').to_dict()
df['collect'] = df['near_relation'].apply(lambda x: add(x,df_dict['near_relation']))
Затем я сгруппировал их по результатам описанных выше циклов.
Может кто-нибудь мне помочь?Заранее спасибо.