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

如何以Pythonic方式为非连续数据创建自定义Bins?

离散数据的Pythonic分箱实现方案

针对你的非连续型数据,这里提供几种简洁的Pythonic方式来生成指定的分箱列:

方法1:字典映射 + Series.map()

这是最直观的离散值归类方式,先定义好原始值到目标分箱标签的映射关系,再批量处理:

import pandas as pd

# 假设原始数据列为df['RawData'],先定义分箱映射规则
bin_mapping = {}

# 批量添加19-24区间的映射
for num in range(19, 25):
    bin_mapping[num] = "19-24"
# 批量添加25-34区间的映射
for num in range(25, 35):
    bin_mapping[num] = "25-34"
# 批量添加55-64区间的映射
for num in range(55, 65):
    bin_mapping[num] = "55-64"
# 处理不在上述区间的数值,统一映射为"其他"
unmatched_vals = [x for x in df['RawData'].unique() if x not in bin_mapping]
bin_mapping.update({val: "其他" for val in unmatched_vals})

# 生成目标分箱列
df['MySpecificBins'] = df['RawData'].map(bin_mapping)

如果原始数据是字符串格式的数值(比如"20"、"30"),只需把字典的键改成对应字符串即可。

方法2:转数值后用pd.cut(适用于可转数值的离散数据)

如果你的离散数据本质是数值型(或可转为数值的字符串),依然可以借助pd.cut,通过指定labels参数直接生成目标标签:

import pandas as pd

# 先将离散列转为数值类型(处理转换失败的情况)
df['RawDataNum'] = pd.to_numeric(df['RawData'], errors='coerce')

# 定义分箱边界和对应标签
bins = [-float('inf'), 19, 24, 25, 34, 55, 64, float('inf')]
labels = ["<19", "19-24", "25-34", "35-54", "55-64", ">64"]

# 生成分箱列,include_lowest=True确保左边界包含在内
df['MySpecificBins'] = pd.cut(df['RawDataNum'], bins=bins, labels=labels, include_lowest=True)

方法3:np.select多条件映射(适用于复杂规则)

如果分箱规则需要更灵活的条件判断,用np.select可以直接基于逻辑条件归类,无需枚举所有原始值:

import pandas as pd
import numpy as np

# 定义分箱条件和对应的标签
conditions = [
    (df['RawData'] >= 19) & (df['RawData'] <= 24),
    (df['RawData'] >= 25) & (df['RawData'] <= 34),
    (df['RawData'] >= 55) & (df['RawData'] <= 64)
]
choices = ["19-24", "25-34", "55-64"]

# 生成分箱列,不在条件内的值设为"其他"
df['MySpecificBins'] = np.select(conditions, choices, default="其他")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:40:42