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

如何基于列值范围动态为Pandas DataFrame每行分配组编号?

动态分组解决方案

直接用Pandas的pd.cut和factorize组合就能实现动态分组,不用硬编码所有条件,步骤如下:

步骤1:定义col_1的区间配置

先把col_1的区间和对应标签(可选)定义成变量,后续要调整区间直接改这里就行:

import pandas as pd

# 定义col_1的区间(左闭右开,最后一个区间用inf表示无穷大)
col1_bins = [0, 10, 15, 20, float('inf')]
# 给每个区间起易识别的标签(也可以省略,直接用区间字符串)
col1_labels = ['0-10', '11-15', '16-20', '20+']

步骤2:对col_1进行区间划分

用pd.cut把col_1的值映射到对应的区间标签:

df['col1_group'] = pd.cut(df['col_1'], bins=col1_bins, labels=col1_labels, include_lowest=True)

include_lowest=True确保0这类边界值被正确包含在第一个区间里。

步骤3:合并分组条件并生成组编号

把col_1的区间分组和col_2的值合并成唯一组合键,再用pd.factorize给每个组合分配唯一的组编号:

# 组合两个条件成唯一键
df['group_key'] = df['col1_group'].astype(str) + '_' + df['col_2'].astype(str)
# 生成组编号(从0开始,如需从1开始可加:+1)
df['group_id'], _ = pd.factorize(df['group_key'])

完整示例代码

import pandas as pd

d = {'ID': [100, 101, 102, 103, 104, 105],
     'col_1': [12, 3, 7, 13, 19, 25],
     'col_2': [3, 1, 3, 3, 2, 4]
    }

df = pd.DataFrame(data=d)

# 动态定义col_1的区间和标签
col1_bins = [0, 10, 15, 20, float('inf')]
col1_labels = ['0-10', '11-15', '16-20', '20+']

# 划分col_1区间
df['col1_group'] = pd.cut(df['col_1'], bins=col1_bins, labels=col1_labels, include_lowest=True)

# 生成组编号
df['group_key'] = df['col1_group'].astype(str) + '_' + df['col_2'].astype(str)
df['group_id'], _ = pd.factorize(df['group_key'])

# 查看结果
print(df[['ID', 'col_1', 'col_2', 'group_id']])

输出结果

ID  col_1  col_2  group_id
0  100     12      3         0
1  101      3      1         1
2  102      7      3         2
3  103     13      3         0
4  104     19      2         3
5  105     25      4         4

可以看到第0行和第3行因col_1同属[11,15]区间、col_2均为3,被分到同一组(group_id=0)。

动态扩展说明

  • 调整col_1区间:直接修改col1_bins和col1_labels即可,无需改动后续逻辑;
  • col_2新增值:factorize会自动识别并分配新组编号,不用提前预定义所有可能值;
  • 新增分组条件:只需在group_key里追加对应列的字符串转换即可,比如加上col_3:df['group_key'] = df['col1_group'].astype(str) + '_' + df['col_2'].astype(str) + '_' + df['col_3'].astype(str)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 19:20:34