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

如何基于ID的高频时段及最高繁忙度生成统一分类列?

解决方案:按店铺ID统一分类冰淇淋店业务时段

步骤1:生成符合规则的临时分类列

替换原有pd.cut逻辑,精准生成贴合需求的临时分类(非核心时段统一标记为None):

import pandas as pd
import numpy as np

# 用条件判断生成临时分类列
conditions = [
    (data["Time"] >=7) & (data["Time"] <=10),
    (data["Time"] >=11) & (data["Time"] <=14),
    (data["Time"] >=17) & (data["Time"] <=21)
]
choices = ["Morning", "Afternoon", "Night"]
data["temp_class"] = np.select(conditions, choices, default="None")

步骤2:按ID分组确定最终分类

按店铺ID分组,统计各分类的出现次数、对应最高繁忙度,通过排序优先级解决平局问题:

# 分组统计每个ID下各分类的出现次数、最大Busy值
grouped = data.groupby(["ID", "temp_class"]).agg(
    count=("temp_class", "size"),
    max_busy=("Busy", "max")
).reset_index()

# 按ID分组后,先按分类次数降序,再按最高Busy值降序,取第一行作为该ID的最终分类
final_class = grouped.sort_values(by=["ID", "count", "max_busy"], ascending=[True, False, False]) \
                     .groupby("ID").first() \
                     .reset_index()[["ID", "temp_class"]] \
                     .rename(columns={"temp_class": "Classification"})

步骤3:将分类映射回原数据集

把每个ID的统一分类批量赋值给该ID的所有记录:

# 合并原数据与最终分类结果
data = data.merge(final_class, on="ID", how="left")

# 可选:清理临时列
data.drop("temp_class", axis=1, inplace=True)

逻辑说明

  • 临时分类生成:用np.select避免pd.cut的区间边界歧义,精准匹配规则
  • 平局处理:优先按分类出现次数排序,次数相同时取对应分类下Busy值最高的选项
  • 批量映射:通过merge实现单个ID的分类结果同步到所有关联记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 22:40:24