迭代pandas行并乘以预设行(k-means)

时间:2017-04-13 05:42:36

标签: python pandas k-means

我正在尝试使用预设数据帧重新创建k-means分析。目前,我正在尝试遍历我的数据帧的每一行(698行)并执行函数(row-mu)** 2,然后确定平方根。以下步骤是将所述函数的平方根与我的2个聚类(mu2或mu4)的平均值进行比较以确定距该点的距离,并将该sqrt数分配给每个分类器,使其更接近...如果我指定哪些行将是我的两个μ参数来操作,我的功能正常工作:

A=[]
B=[]

mu2=df1.loc[5] #in this instance, mu2=(8,10,10,8,7,10,9,7,1)
mu4=df1.loc[245] #in this instance, mu4=(5,1,1,2,2,2,3,1,1)
specificrow=df1.loc[374] #in this instance, specificrow=(3,1,2,1,2,1,2,1,1)

def d(row, mu):
    sums=(row-mu)**2
    return math.sqrt(sums.sum())

mu2dist=d(specificrow, mu2)
mu4dist=d(specificrow, mu4)

if mu4dist<mu2dist:
    A.append(mu2dist)
else:
    B.append(mu4dist)

print(A, B)

这样可以正确添加20.25到A

但是,如果我尝试将mu2和mu4分配给数据帧中的随机行:

mu2=df1.ix[np.random.choice(df.index, 1)]
mu4=df1.ix[np.random.choice(df.index, 1)]

相同的代码不起作用

for index, row in df1.iterrows():  
    mu2dist=d(row, mu2)
    mu4dist=d(row, mu4)

    if mu4dist<mu2dist:
        A.append(mu2dist)
    else:
        B.append(mu4dist)

print(A, B)

我收到错误消息:

'TypeError: cannot convert the series to <class 'float'>'

回溯还引用了我的d(行,mu)函数,特别是这一行:

return math.sqrt(sums.sum())

我尝试使用.astype()事先将整个df转换为float,但我仍然遇到同样的错误。

如果我打印mu2并且它的类型(每次都明显改变),我得到这个输出:

     A2   A3   A4   A5   A6   A7   A8   A9  A10
28  2.0  1.0  1.0  1.0  2.0  1.0  2.0  1.0  1.0 <class 
'pandas.core.frame.DataFrame'>

似乎是浮点数,但实际类型只是'pandas dataframe'。如果有人能指引我朝着正确的方向获取这些金额来退回/打印出来,我将非常感激。我仍然需要研究如何保留这些值以便重用,因为我多次重复这个过程以找到最佳质心,但我需要先得到这些值。

由于

0 个答案:

没有答案