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

如何基于列值对Pandas DataFrame实验数据分组并去除过渡点?

基于波动数值的Pandas DataFrame分组与过渡点删除方案

需求说明

  • 针对包含多列实验数据的Pandas DataFrame,基于某一列(如Vdot_out (hot), m3/h)的波动数值,划分5个数值相近的主组
  • 删除组间的过渡零散数据(不属于任何主组的样本)

原有方案的缺陷

原有手动分箱的方式存在明显问题:

  • 分箱范围依赖np.linspace的参数设置,过宽会合并不同数值组,过细则会拆分相近数值
  • 靠删除元素数<20的箱来清理过渡点,逻辑缺乏通用性,容易误删有效数据或漏删过渡点

推荐解决方案

采用K-means聚类+数据平滑的组合方案,既能指定固定5个分组,又能自动过滤波动带来的过渡点:

步骤说明

  1. 数据平滑:对目标列做滚动均值处理,抵消随机波动对分组的干扰
  2. K-means聚类:指定簇数为5,自动将数值相近的样本归为一组
  3. 过滤过渡点:删除样本数过少的簇(即过渡点)
  4. 生成分组:按聚类结果拆分出子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对数值尺度敏感,比如如果目标列的数值范围很大,标准化后聚类效果更好。

最后标注来源,符合要求。
相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 07:17:43