You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Series.apply()返回DataFrame而非Series?自定义K-means遇问题

问题原因

你代码里的lambda x中,x是列c的每行值(即[1,2]),但计算时调用的df['a']和df['b']是整个列的全部数据,而非当前行对应的a、b值。每次执行apply时,都会用这个[1,2]和整个a、b列做运算,得到一个长度为3的Series;三次执行后,这些Series被拼接成了3行3列的DataFrame,这就是你看到的结果。

解决方法

有两种简洁的实现方式:

方式一:逐行处理(指定axis=1)

使用df.apply()并传入axis=1参数,让lambda接收整行数据,直接取当前行的a、b、c值计算:

df['c'] = df.apply(lambda row: ((row['c'][0] - row['a'])**2 + (row['c'][1] - row['b'])**2)**0.5, axis=1)

方式二:向量化计算(更高效)

由于所有质心都是[1,2],可以直接用向量化运算,避免逐行循环,运算效率更高:

df['c'] = ((1 - df['a'])**2 + (2 - df['b'])**2)**0.5

执行任意一种方法后,都能得到你预期的一维Series,替换原c列后的结果为:

0    2.000000
1    3.162278
2    4.472136
Name: c, dtype: float64

内容的提问来源于stack exchange,提问作者NaiveBae

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 11:52:17