在 Python 中的 For 循环内连接并附加到 DataFrame

Posted

技术标签:

【中文标题】在 Python 中的 For 循环内连接并附加到 DataFrame【英文标题】:Concatenating and appending to a DataFrame inside the For Loop in Python 【发布时间】:2021-10-31 06:11:26 【问题描述】:

我有以下问题。

有相当大的数据集包含特征和 ID。由于任务定义,我正在尝试进行聚类,但不是针对所有数据集,而是获取每个 ID,然后根据该特定 ID 的特征数据训练模型。细节如何:

想象一下,我们有我们的初始数据框df_init

然后我创建具有唯一 ID_s 的数组:

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

之后,就这样创建了集合推导:

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

使用 for 循环并迭代 dds,我正在获取数据并将其用于训练聚类算法。之后,pd.concat() 用于取回数据帧(对于本示例,将仅显示两个 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])
    labels = ac.labels_
    labels = pd.DataFrame(labels)
    df = pd.concat([df, labels])
    print(i)
    print('Labels: ', labels)

所以这个循环的结果将如下输出:

输出的 df 看起来像这样(仅显示第一个 ID,其余标签也在那里):

我的问题如下:如何在循环中将附加列添加到此数据框,以将某些 ID 与相应标签(4 个标签-ID_1、另外 4 个标签-ID_2 等)匹配?有没有可以实现这一目标的 pandas 解决方案?

非常感谢!

【问题讨论】:

【参考方案1】:

在这一行以下:

labels = pd.DataFrame(labels)

添加以下内容:

labels['ID']=i

这将为您提供具有每个子集正确 ID 的额外列

【讨论】:

以上是关于在 Python 中的 For 循环内连接并附加到 DataFrame的主要内容,如果未能解决你的问题,请参考以下文章

将每个 seaborn 图形附加到 for 循环内的 PDF

Python for 循环仅将最后一个列表作为值附加

Bash将值附加到for循环内的列表中

从python中的for循环返回值

Python中的嵌套循环

通过python中的if条件附加列表