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

如何将duration列按三等分区间划分为short/medium/long三类

实现duration列三等分类(等宽区间)

你的duration列当前是分:秒格式的字符串类型,无法直接做区间划分,先转成数值再做等宽分箱即可,完整流程如下:

操作步骤

  • 将时长字符串转换为可计算的数值(统一转为总秒数,避免格式解析错误)
  • 调用pandas等宽分箱方法,将数值范围平均拆分为3个区间
  • 按区间从短到长依次映射为short、medium、long三个分类值

完整代码

# 1. 把MM:SS格式的字符串转为总秒数(数值型)
df['duration_sec'] = df['duration'].apply(
    lambda x: int(x.split(':')[0]) * 60 + int(x.split(':')[1])
)

# 2. 等宽拆分为3个区间,打分类标签
df['duration_type'] = pd.cut(
    df['duration_sec'],
    bins=3,
    labels=['short', 'medium', 'long']
)

# 不需要中间计算列的话可以直接删除
# df.drop(columns='duration_sec', inplace=True)

说明

这里用pd.cut实现等宽分箱:传入bins=3时,会自动取duration_sec列的最小值和最大值作为总区间端点,把总长度平均切分为3份,完全匹配你要的「按取值范围拆分为3个等大小区间」的要求。
注意不要和等频分箱的pd.qcut混淆,pd.qcut是让每个区间的样本数量尽量一致,不是区间大小相等。

可以用下面的代码验证分箱结果:

# 查看每个分类的样本数量
print(df['duration_type'].value_counts())

# 查看实际的分箱边界
temp_bins = pd.cut(df['duration_sec'], bins=3)
print("分箱区间边界:", temp_bins.cat.categories)

结合你给出的样例数据,最短时长是48秒(00:48),最长是100秒(01:40),实际分箱区间大概为:

  • short:48秒 ~ 65.3秒(对应约00:48~01:05的时长)
  • medium:65.3秒 ~ 82.7秒(对应约01:05~01:23的时长)
  • long:82.7秒 ~ 100秒(对应约01:23~01:40的时长)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:09:24