为何使用df.groupby()分组后DataFrame部分列消失?
问题分析与解决
你的DataFrame分组后丢失3列,核心原因是**groupby().mean()仅对数值型列执行计算,非数值型列会被自动排除**。虽然你提供的示例数据中WindGustDir、WindDir9am、WindDir3pm是浮点型,但实际你的DataFrame里这三列大概率是object类型(比如包含字符串、混合数据格式),导致pandas跳过这些列的均值计算。
验证步骤
- 检查目标列的数据类型:
print(df[["WindGustDir", "WindDir9am", "WindDir3pm"]].dtypes) - 查看列内容,确认是否存在非数值数据:
print(df[["WindGustDir", "WindDir9am", "WindDir3pm"]].head(20))
解决方案
如果确认是数据类型问题,将这三列转换为数值型后重新执行分组:
import pandas as pd # 转换为数值型,无法转换的内容设为NaN df[["WindGustDir", "WindDir9am", "WindDir3pm"]] = df[["WindGustDir", "WindDir9am", "WindDir3pm"]].apply(pd.to_numeric, errors='coerce') # 原分组函数 def update_centroids(cluster, k): df["Cluster"] = cluster display(df) display(df.groupby("Cluster").mean().shape) return df.groupby("Cluster").mean()
若转换后仍有异常,可检查分组内有效数据量:
# 查看每个组中目标列的非空值数量 print(df.groupby("Cluster")[["WindGustDir", "WindDir9am", "WindDir3pm"]].count())
如果某组内某列全为NaN,均值结果会是NaN,但列不会被移除,这种情况可根据业务需求填充缺失值或过滤无效分组。
内容的提问来源于stack exchange,提问作者Jayan Paliwal
相关产品推荐
相关产品推荐

