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

如何将连续值按间隔2转换为序数?附随机数据集处理示例

按固定间隔(如间隔2)为连续值生成序数的方法

若需从连续值生成序数,如何按间隔2进行划分?若拥有100条递增数据,我可使用cut函数创建2个或50个分箱;但面对随机数据集时,例如某列值为[1,2,3,2,2,4,5,10,15,20],按间隔5生成序数得到[1,1,1,1,1,1,1,2,2,3],那按间隔2处理随机数据集该如何操作?以下是我创建2个分箱的代码:

import pandas as pd
import numpy as np

np.random.seed(10)
df = pd.DataFrame({
    'normal': np.random.normal(10, 3, 1000),
    'chi': np.random.chisquare(4, 1000)
})

pd.cut(df['normal'], 2)

两种可行方法

方法一:用pd.cut自定义固定间隔分箱

pd.cut不止能指定分箱数量,还可以手动设置分箱区间,实现固定间隔划分:

步骤:

  1. 先找数据集的最小、最大值;
  2. 生成间隔为2的分箱数组;
  3. 用pd.cut划分数据,同时给每个分箱分配序数标签。

示例:处理你给的随机数组

data = [1,2,3,2,2,4,5,10,15,20]
min_val = min(data)
max_val = max(data)

# 生成间隔2的分箱,最后多补一个值保证最大值被包含
bins = np.arange(min_val, max_val + 2, 2)
# 生成从1开始的序数标签
labels = range(1, len(bins))

# 划分数据,include_lowest=True确保最小值被放进第一个分箱
result = pd.cut(data, bins=bins, labels=labels, include_lowest=True)
print(result.tolist())
# 输出:[1, 1, 2, 1, 1, 2, 3, 5, 8, 10]

处理你的df['normal']列

series = df['normal']
min_val = series.min()
max_val = series.max()

# 如果最小值不是整数,先向下取整让分箱对齐(比如2.1就从2开始)
adjusted_min = np.floor(min_val)
bins = np.arange(adjusted_min, max_val + 2, 2)
labels = range(1, len(bins))

df['normal_ordinal'] = pd.cut(series, bins=bins, labels=labels, include_lowest=True)

方法二:用数学运算直接计算(更高效)

如果是大数据集,直接用整数除法算序数更快,不用生成分箱数组:

逻辑:

假设间隔是2,序数从1开始,计算每个值和最小值的差,除以2取整后加1就行。要是想从0开始计数,去掉+1即可。

示例:处理你给的随机数组

data = [1,2,3,2,2,4,5,10,15,20]
step = 2
min_val = min(data)

ordinal = [((x - min_val) // step) + 1 for x in data]
print(ordinal)
# 输出:[1, 1, 2, 1, 1, 2, 3, 5, 8, 10]

处理你的df['normal']列

用numpy的向量化运算,速度更快:

step = 2
min_val = df['normal'].min()

df['normal_ordinal'] = ((df['normal'] - min_val) // step).astype(int) + 1

小提示

  • 要是想让分箱从0开始对齐(比如[0,2), [2,4)...),把min_val换成0就行;
  • pd.cut默认是左闭右开区间,include_lowest=True能确保最小值被包含在第一个区间里;
  • 数学运算方法速度快,适合大数据;pd.cut能直观看到分箱区间,适合需要验证分箱范围的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:27:22