You need to enable JavaScript to run this app. Pandas基于指定小时分段列表为DataFrame新增category列的实现问题
优惠活动
大模型
产品
解决方案
定价
更多

Pandas基于指定小时分段列表为DataFrame新增category列的实现问题

Pandas 新增category列实现方案

完整可运行代码

import pandas as pd

# 构造原始数据
data = {
    "hours": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23],
    "values": [0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1]
}
df = pd.DataFrame(data)

# 预设小时边界列表
bounds = [2, 4, 6, 8, 10, 16, 18, 21, 23]

# 预处理分箱边界:微调末尾值以覆盖整数23
bins = bounds.copy()
bins[-1] += 0.1

# 按边界分箱,自动分配区间编号,无归属区间的填充0
df['temp_cat'] = pd.cut(
    df['hours'],
    bins=bins,
    labels=range(1, len(bounds)),
    right=False
).fillna(0)

# 结合values列做掩码,生成最终category列
df['category'] = df['temp_cat'].astype(int) * df['values']

# 清理临时列
df = df.drop(columns=['temp_cat'])

运行结果

执行上述代码后,df的输出如下:

hours  values  category
0       1       0         0
1       2       1         1
2       3       1         1
3       4       1         2
4       5       0         0
5       6       1         3
6       7       1         3
7       8       1         4
8       9       0         0
9      10       1         5
10     11       0         0
11     12       0         0
12     13       0         0
13     14       0         0
14     15       0         0
15     16       1         6
16     17       1         6
17     18       1         7
18     19       0         0
19     20       0         0
20     21       1         8
21     22       1         8
22     23       1         8

逻辑说明

  • 该方案无需依赖groupby,需求本质是按预设固定边界做区间划分,属于典型分箱场景,pd.cut可直接匹配规则
  • 配置right=False将区间定义为左闭右开,避免相邻边界的重叠冲突,每个小时值仅归属一个区间
  • 仅对最后一个边界加0.1做微调,不修改原有边界数值,即可让整数小时23被纳入最后一个区间
  • 区间编号与values列相乘的运算自动实现掩码效果:values为0的位置结果直接置0,values为1的位置保留对应区间编号,完全符合赋值规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 18:54:09