如何基于列值对Pandas DataFrame实验数据分组并去除过渡点?
基于波动数值的Pandas DataFrame分组与过渡点删除方案
需求说明
- 针对包含多列实验数据的Pandas DataFrame,基于某一列(如
Vdot_out (hot), m3/h)的波动数值,划分5个数值相近的主组 - 删除组间的过渡零散数据(不属于任何主组的样本)
原有方案的缺陷
原有手动分箱的方式存在明显问题:
- 分箱范围依赖
np.linspace的参数设置,过宽会合并不同数值组,过细则会拆分相近数值 - 靠删除元素数<20的箱来清理过渡点,逻辑缺乏通用性,容易误删有效数据或漏删过渡点
推荐解决方案
采用K-means聚类+数据平滑的组合方案,既能指定固定5个分组,又能自动过滤波动带来的过渡点:
步骤说明
- 数据平滑:对目标列做滚动均值处理,抵消随机波动对分组的干扰
- K-means聚类:指定簇数为5,自动将数值相近的样本归为一组
- 过滤过渡点:删除样本数过少的簇(即过渡点)
- 生成分组:按聚类结果拆分出子DataFrame
代码实现
import pandas as pd import numpy as np from sklearn.cluster import KMeans from sklearn.preprocessing import StandardScaler # 假设目标列为"Vdot_out (hot), m3/h" target_col = "Vdot_out (hot), m3/h" # 1. 数据平滑:滚动均值(窗口大小可根据波动程度调整,比如10) df['smoothed_target'] = df[target_col].rolling(window=10, min_periods=1).mean() # 2. 标准化数据(K-means对尺度敏感,提升聚类稳定性) scaler = StandardScaler() scaled_data = scaler.fit_transform(df[['smoothed_target']]) # 3. K-means聚类,强制生成5个簇 kmeans = KMeans(n_clusters=5, random_state=42) df['cluster'] = kmeans.fit_predict(scaled_data.comp)(_可选地若干使用缺乏 enter Ell成功 ,对,指定5个,然后过滤掉那些因为波动产生的小簇(过渡点)。另外,滚动窗口的大小可以让用户根据自己的波动情况调整,比如如果波动大就调大窗口。 还有,原有代码里用户用了"Column X",可能是笔误,所以在推荐代码里用了目标列的实际名称"Vdot_out (hot), m3/h",更贴合用户的场景。 另外,标准化是因为K-means对数值尺度敏感,比如如果目标列的数值范围很大,标准化后聚类效果更好。 最后标注来源,符合要求。
相关产品推荐
相关产品推荐

