求写Python函数:输入球员姓名返回同聚类标签的所有球员姓名
需求说明
我已经完成球员数据的KMeans聚类,并在DataFrame中添加了cluster列,代码如下:
eval_players = pd.read_csv(r"file_location") bld = eval_players ['buildup'] att = eval_players ['attack'] bld_att = np.column_stack((bld,att)) km_res = KMeans(n_clusters = 3).fit(bld_att) cluster = km_res.cluster_centers_ plt.scatter(bld,att) for k,row in eval_players.iterrows(): plt.text(row['buildup'],row['attack'],row['Name']) plt.scatter (cluster[:,0],cluster[:,1], s = 500) clust = km_res.labels_ eval_players['cluster'] = clust.tolist()
我刚认真学编程两个月,对函数编写很陌生。试过用input函数,但后续逻辑搞不懂。现在需要一个函数:输入球员姓名,先获取他的聚类标签,再返回所有同标签的球员姓名。如果有合适的内置函数也请告知。
解决方案
自定义函数实现
你可以直接基于已有的eval_players DataFrame写一个简单函数,逻辑非常直接:
- 根据输入的球员姓名,筛选出对应的
cluster值 - 用这个
cluster值筛选所有同聚类的球员,提取姓名列
代码如下:
def get_same_cluster_players(player_name): # 获取目标球员的聚类标签 target_cluster = eval_players.loc[eval_players['Name'] == player_name, 'cluster'].values[0] # 筛选同聚类的所有球员姓名 same_cluster_players = eval_players.loc[eval_players['cluster'] == target_cluster, 'Name'].tolist() # 返回结果 return same_cluster_players
使用示例
调用函数时直接传入球员姓名即可:
# 替换成你要查询的球员名字 print(get_same_cluster_players("梅西"))
补充说明
- 不需要复杂的内置函数,用pandas的
loc方法就能完成筛选,这是处理DataFrame最常用的方式之一 - 如果担心输入的球员姓名不存在会报错,可以加个简单的判断:
def get_same_cluster_players(player_name): # 检查球员是否存在 if player_name not in eval_players['Name'].values: return f"球员 {player_name} 不存在" target_cluster = eval_players.loc[eval_players['Name'] == player_name, 'cluster'].values[0] same_cluster_players = eval_players.loc[eval_players['cluster'] == target_cluster, 'Name'].tolist() return same_cluster_players
内容的提问来源于stack exchange,提问作者Kabir Hosangadi
相关产品推荐
相关产品推荐

