熊猫:将功能应用于组的组

时间:2016-07-13 10:05:54

标签: python pandas

我遇到以下问题:

给定一个2D数据帧,第一列有值,第二列给出点的类别,我想计算每个类别均值的k-means字典,并指定特定值的组平均值最接近的质心作为原始数据框中的新列。

我想使用groupby执行此操作。

更一般地说,我的问题是,应用(据我所知)只能使用在各个组上定义的函数(如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中的一个新列,它为每个条目提供字典值。

1 个答案:

答案 0 :(得分:0)

您可以通过以下方式实现:

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_data_frame = pd.DataFrame(groups.mean())
centroid, means_data_frame['cluster'] = kmeans2(means_data_frame['B'], k)
df.join(means_data_frame, rsuffix='_mean', on='A')

这将向df B_meancluster添加另外2列,分别表示群组的平均值和群组最接近的群集。

如果您真的想使用apply,可以编写一个函数来从means_data_frame读取群集值并将其分配到df

中的新列
相关问题