#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
Это даст вам дополнительный столбец с соответствующим идентификатором для каждого подмножества