Объединение и добавление в фрейм данных внутри цикла For в Python

#python #pandas #for-loop #concatenation #cluster-analysis

Вопрос:

У меня есть следующая проблема.

Существует довольно большой набор данных с функциями и идентификаторами. Из-за определения задачи я пытаюсь выполнить кластеризацию, но не для всего набора данных, вместо этого я беру каждый из идентификаторов, а затем обучаю модель на основе данных объектов с этого конкретного идентификатора. Как это выглядит в деталях:

Представьте, что у нас есть наш исходный фрейм данных df_init

Затем я создаю массив с уникальными идентификаторами:

 dd = df_init['ID'].unique()
 

После этого точно так же создается понимание набора:

 dds = {x:y for x,y in df_init.groupby('ID')}
 

Используя для циклов и повторения dds , я беру данные и использую их для обучения алгоритму кластеризации. После этого pd.concat() используется для возврата фрейма данных(для этого примера будет отображаться только два идентификатора).:

 df = pd.DataFrame()
d={}
n=5

for i in dd[:2]:
    d[i] = dds[i].iloc[: , 1:5].values   
    ac = AgglomerativeClustering(n_clusters=n, linkage='complete').fit(d[i])
    labels = ac.labels_
    labels = pd.DataFrame(labels)
    df = pd.concat([df, labels])
    print(i)
    print('Labels: ', labels)
 

Таким образом, результатом для этого цикла будет следующий вывод:

введите описание изображения здесь

И вывод df будет выглядеть так(отображается только для первого идентификатора, остальные метки также есть):

введите описание изображения здесь

Мой вопрос заключается в следующем: как я могу добавить дополнительный столбец в этот фрейм данных в цикле, который будет соответствовать определенному идентификатору соответствующим меткам (4 метки-ID_1, еще 4 метки-ID_2 и т. Д.)? Есть ли какое-либо решение для панд для достижения этой цели?

введите описание изображения здесь

Заранее большое спасибо!

Ответ №1:

Ниже этой строки:

 labels = pd.DataFrame(labels)
 

Добавьте следующее:

 labels['ID']=i
 

Это даст вам дополнительный столбец с соответствующим идентификатором для каждого подмножества