Python 查找最接近质心的列-熊猫

Python 查找最接近质心的列-熊猫,python,dataframe,scikit-learn,Python,Dataframe,Scikit Learn,对于上面按状态划分的Kmeans分析,我想从每个集群中提取/识别元素,这些元素最接近该集群的质心。基本上:实现基于欧几里德距离。要获得每个质心的两个最近点,我们可以查看属于每个簇的点集,取相关质心之间差值的2-范数,并返回两个最近点: def get_2_最接近(群集id、df、列、中心): 当前=df[df[“群集”]==群集id][列] 最近的=np.argsort( np.linalg.norm(current.to_numpy(dtype=np.float64)-中心[cluster\u

对于上面按状态划分的Kmeans分析,我想从每个集群中提取/识别元素,这些元素最接近该集群的质心。

基本上:实现基于欧几里德距离。要获得每个质心的两个最近点,我们可以查看属于每个簇的点集,取相关质心之间差值的2-范数,并返回两个最近点:

def get_2_最接近(群集id、df、列、中心):
当前=df[df[“群集”]==群集id][列]
最近的=np.argsort(
np.linalg.norm(current.to_numpy(dtype=np.float64)-中心[cluster\u id],轴=1)
)
返回电流.iloc[最近的[:2]]
上下文中的完整示例:

将numpy导入为np
作为pd进口熊猫
从sklearn.cluster导入KMeans
将matplotlib.pyplot作为plt导入
df=pd.DataFrame(列=[“状态”、“成人”、“高级”、“儿童”])
df.loc[0]=[“加利福尼亚”,111,2,6]
df.loc[1]=[“德克萨斯州”,70,2,4]
df.loc[2]=[“佛罗里达”,64,4,5]
df.loc[3]=“格鲁吉亚”,25,2,3]
df.loc[4]=[“阿拉斯加”,90,1,2]
df.loc[5]=“夏威夷”,105,2,1]
df.loc[6]=“华盛顿”,27,3,2]
df.loc[7]=“宾夕法尼亚州”,90,2,1]
df.loc[8]=“弗吉尼亚”,63,2,3]
df.loc[9]=[“亚利桑那州”,34,2,4]
df.loc[10]=“密歇根”,22,5,2]
kmeans=kmeans(n_集群=4)
y=kmeans.fit_predict(df[“成人”、“老年人”、“儿童”])
df[“集群”]=y
中心=kmeans.cluster\u中心_
def get_2_最接近(群集id、df、列、中心):
当前=df[df[“群集”]==群集id][列]
最近的=np.argsort(
np.linalg.norm(current.to_numpy(dtype=np.float64)-中心[cluster\u id],轴=1)
)
返回电流.iloc[最近的[:2]]
_最近的=pd.DataFrame(列=[“成人”、“高级”、“儿童”])
对于范围内的i(len(中心)):
输出=获取最近的(i、df、[“成人”、“老年人”、“儿童”]、kmeans.cluster\u中心)
_最近的=_最近的。追加(输出)
plt.分散(成人df.高级df.标签=“原始”)
plt.散射(_最近。成人,_最近。老年人,label=“2最接近质心”)
plt.散射(中心[:,0],中心[:,1],color=“黑色”,marker=“*”,label=“形心”)
plt.legend()
plt.show()
预期产出:

评论中提出的问题:您可以通过合并两个数据帧来返回
状态
列:

打印(
_merge(df,left_index=True,right_index=True)['State']
)
输出:

4          Alaska
7    Pennsylvania
6      Washington
3         Georgia
2         Florida
8        Virginia
0      California
5          Hawaii

欢迎来到SO Code_starter!是否要提取到每个群集中心的“最近点”?或者您想在表示集群的
df
中添加一列吗?如果有2个点,您想找出离集群中心最近的2个点。非常感谢,有没有办法检索最近的州名称?您能澄清一下“州名称”是什么意思吗在本例中:
\u最近的
数据框中的列索引将与原始
df
数据框中的列索引相同。很抱歉出现歧义。我指的是我现在想知道的州名。我编辑了答案以显示一个示例,其中数据帧在索引上合并,然后返回状态。
4          Alaska
7    Pennsylvania
6      Washington
3         Georgia
2         Florida
8        Virginia
0      California
5          Hawaii