时间序列聚类问题:聚类时如何保留时间戳索引但不将其作为特征
解决方法
核心逻辑是K-Means的输出结果顺序和你输入聚类模型的样本顺序完全一一对应,只要保证特征提取时不打乱原DataFrame的行顺序,就能直接把聚类结果和原时间戳绑定,无需把时间戳纳入特征参与运算。
具体操作步骤
- 第一步:从原DataFrame中仅提取10个特征列做预处理,不要改动原DataFrame的行顺序
示例代码:import pandas as pd import numpy as np from sklearn.cluster import KMeans from sklearn.preprocessing import StandardScaler # 假设你的原数据集为df,timestamp是df的索引,10个特征为df的普通列 feature_cols = df.columns.tolist() X = df[feature_cols].values - 第二步:对特征做缩放,执行K-Means聚类
示例代码:scaler = StandardScaler() X_scaled = scaler.fit_transform(X) kmeans = KMeans(n_clusters=3, random_state=42) # 聚类得到的labels顺序和X的行顺序、原df的行顺序完全一致 labels = kmeans.fit_predict(X_scaled) - 第三步:把聚类标签贴回原DataFrame,直接通过索引关联时间戳
示例代码:df['cluster_label'] = labels
按簇提取对应时间戳的方法
提取指定簇的所有时间戳:
# 示例:提取簇0的所有时间戳 cluster_0_timestamps = df[df['cluster_label'] == 0].index.tolist()
批量汇总所有簇对应的时间戳:
cluster_timestamp_map = df.groupby('cluster_label').apply(lambda x: x.index.tolist()).to_dict()
注意事项
- 不要对提取后的特征矩阵单独做shuffle操作,否则会打乱和原DataFrame的行对应关系
- 如果中间需要做缺失值删除、异常值过滤等操作,直接在原DataFrame上处理后再提取特征,保证行顺序一致
内容的提问来源于stack exchange,提问作者Ghadah
相关产品推荐
相关产品推荐

