【发布时间】:2016-11-15 20:35:00
【问题描述】:
我有以下问题:
给定一个二维数据框,第一列包含值,第二列给出点的类别,我想计算每个类别均值的 k-means 字典,并分配特定值的组均值最接近的质心作为原始数据框中的新列。
我想使用groupby 执行此操作。
更一般地说,我的问题是,apply(据我所知)只能使用在各个组上定义的函数(如 mean())。 k-means 需要所有组的信息。有没有比将所有内容转换为 numpy 数组并使用它们更好的方法?
import pandas as pd
import numpy as np
from scipy.cluster.vq import kmeans2
k=4
raw_data = np.random.randint(0,100,size=(100, 4))
f = pd.DataFrame(raw_data, columns=list('ABCD'))
df = pd.DataFrame(f, columns=['A','B'])
groups = df.groupby('A')
means = groups.mean().unstack()
centroids, dictionary = kmeans2(means,k)
fig, ax = plt.subplots()
print dictionary
我现在想得到的是 df 中的一个新列,它为每个条目提供字典中的值。
【问题讨论】:
-
您能再描述一下您对 groupby 的尝试吗?对我来说这似乎很简单 - 但同样,我不确定你在说哪个问题。
-
@srey123 抱歉耽搁了。到目前为止,我试过: import pandas as pd from scipy.cluster.vq import kmeans2 k=4 raw_data = np.random.randint(0,100,size=(100, 4)) f = pd.DataFrame(raw_data, columns=list ('ABCD')) df = pd.DataFrame(f, columns=['A','B']) groups = df.groupby('A') mean = groups.mean().unstack() 质心,字典= kmeans2(means,k) fig, ax = plt.subplots() 打印字典 我现在想得到的是 df 中的一个新列,它为每个条目提供字典中的值。不幸的是,我不知道如何将其排版为代码。
-
你能在你的问题中自己添加这个吗?每行前留 4 个空格作为代码输入。在 cmets 中,不能发布代码。
-
@srey123 完成,谢谢!