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

基于Pandas向空DataFrame添加并迭代新行以用于聚类

针对RFM_class分组聚类的实现方案

我最近刚好在处理类似的大规模数据RFM聚类场景,结合你的需求——125种RFM_class(范围111-555)、10000行测试样本,给你分享下我的实现思路和代码框架:

核心逻辑拆解

  • 先初始化一个空的DataFrame,用来存放所有RFM_class的聚类结果
  • 遍历每一种RFM_class取值,提取对应的数据子集
  • 对每个子集单独执行聚类算法,生成cluster_class列
  • 将带聚类结果的子集追加到最终的结果DataFrame中

代码示例(Python)

假设我们用pandas处理数据,sklearn.cluster.KMeans做聚类(你可以替换成其他聚类算法,比如DBSCAN、层次聚类等):

import pandas as pd
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
import itertools

# 假设你的测试数据框是df_test,包含RFM_class列和聚类所需的特征列
df_test = pd.read_csv("your_test_data.csv")  # 替换成你的数据加载方式

# 生成所有125种RFM_class取值(111到555,每位1-5)
rfm_classes = [int(''.join(map(str, combo))) for combo in itertools.product(range(1,6), repeat=3)]

# 初始化空结果DataFrame
final_df = pd.DataFrame()

# 遍历每个RFM_class
for rfm in rfm_classes:
    # 提取当前RFM_class的子集
    subset = df_test[df_test['RFM_class'] == rfm].copy()
    
    # 跳过样本量不足的子集(比如样本数<聚类数,这里假设聚类数设为3)
    if len(subset) < 3:
        subset['cluster_class'] = None  # 标记无有效聚类结果
        final_df = pd.concat([final_df, subset], ignore_index=True)
        continue
    
    # 选择聚类所需的特征列(替换成你实际用的特征,比如消费金额、频次等)
    features = subset[['feature1', 'feature2', 'feature3']]
    
    # 特征标准化(避免量纲差异影响聚类结果)
    scaler = StandardScaler()
    scaled_features = scaler.fit_transform(features)
    
    # 执行聚类(这里用KMeans,参数可根据需求调整)
    kmeans = KMeans(n_clusters=3, random_state=42)
    subset['cluster_class'] = kmeans.fit_predict(scaled_features)
    
    # 将结果追加到最终DataFrame
    final_df = pd.concat([final_df, subset], ignore_index=True)

# 查看最终结果
print(final_df.head())

关键优化建议

  • 效率提升:如果是全量数据,遍历125次可能有点慢,可以改用groupby+apply的批量处理方式,代码更简洁高效:
    def cluster_func(group):
        if len(group) < 3:
            group['cluster_class'] = None
            return group
        features = group[['feature1', 'feature2', 'feature3']]
        scaler = StandardScaler()
        scaled_features = scaler.fit_transform(features)
        kmeans = KMeans(n_clusters=3, random_state=42)
        group['cluster_class'] = kmeans.fit_predict(scaled_features)
        return group
    
    final_df = df_test.groupby('RFM_class').apply(cluster_func).reset_index(drop=True)
    
  • 算法适配:如果部分RFM_class的样本分布稀疏,KMeans效果可能不好,可以换成不需要指定聚类数的DBSCAN算法;如果需要层次化分类,层次聚类会更合适。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:31:45