Python for循环中拼接DataFrame时为聚类结果新增对应ID列的方法咨询
直接在生成聚类标签的DataFrame阶段新增ID列即可,修改后的代码如下:
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]) # 构造带ID的标签DataFrame labels = pd.DataFrame({ "ID": i, "cluster_label": ac.labels_ }) # 拼接时添加ignore_index避免不同ID的索引重复冲突 df = pd.concat([df, labels], ignore_index=True) print(i) print('Labels: ', labels)
如果后续需要将聚类结果和原始数据集做合并,可以保留分组数据的原始索引,添加一行代码即可:
labels.index = dds[i].index
针对大数据集场景,还可以优化掉提前生成dds分组字典的步骤,直接遍历groupby对象降低内存占用:
result_list = [] n = 5 # 遍历分组对象,仅在用到对应ID数据时才加载 for idx, (id_val, group_df) in enumerate(df_init.groupby("ID")): # 控制仅处理前2个ID if idx >= 2: break features = group_df.iloc[:, 1:5].values ac = AgglomerativeClustering(n_clusters=n, linkage='complete').fit(features) result_list.append(pd.DataFrame({ "ID": id_val, "cluster_label": ac.labels_ }, index=group_df.index)) df = pd.concat(result_list)
最终输出的df会包含ID和聚类标签两列,每一行标签和所属ID完全对应。
内容的提问来源于stack exchange,提问作者Keithx
相关产品推荐
相关产品推荐

