在迭代数据框时向元数据添加元素

时间:2018-02-20 15:08:03

标签: python pandas dataframe

我有一个名为SBPV_DBPV的数据框,它看起来像这样:

    STUDY_ID    SBPV    DBPV
0   1        12.927571  19.054308
1   3        12.635492  10.603099
2   5        25.825786  7.663226
3   6        16.931817  12.369440

我正在尝试手动实现KMeans算法。所以我有3个质心,我试图计算每行到这些质心的距离,并将最小质心附加到数据帧中的行:

for i, row in SBPV_DBPV.iterrows():
    #distance of each row to the 3 centroids
    dist1 = ((row['SBPV'] - (k1.values.reshape(-1,1)[0]))**2 + (row['DBPV'] - k1.values.reshape(-1,1)[1])**2)**0.5
    dist2 = (row['SBPV'] - (k2.values.reshape(-1,1)[0])**2 + (row['DBPV'] - k2.values.reshape(-1,1)[1])**2)**0.5 
    dist3 = (row['SBPV'] - (k3.values.reshape(-1,1)[0])**2 + (row['DBPV'] - k3.values.reshape(-1,1)[1])**2)**0.5 
    row['cluster'] = min(dist1,dist2,dist3)

然而,在我运行循环之后,数据帧不会被修改。我曾经读过我必须使用.apply来修改数据帧,但我不知道如何在迭代行时实现它。

由于

1 个答案:

答案 0 :(得分:3)

你需要改变:

Response: function () {
    if (typeof this._body === 'string') {
        return JSON.parse(/** @type {?} */ (this._body));
    }
    if (this._body instanceof ArrayBuffer) {
        return JSON.parse(this.text());
    }
    return this._body;
} 

为:

row['cluster'] = min(dist1,dist2,dist3)

按索引值分配。