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

如何在Pandas中按年份子集对数据行进行分箱与分类?

按年份子集对苏格兰犯罪数据集分箱的解决方案

核心思路

按date_start提取的年份分组,对每个年份的count_per_10k数据单独计算分箱区间(基于该年份自身的数值范围),再用pd.cut分成8个类别,确保每个年份的分箱适配自身数据分布,而非用全数据集的统一区间。

具体步骤&代码

  1. 处理日期列(若未转为datetime格式)
import pandas as pd
import numpy as np

# 将date_start转为datetime类型
df['date_start'] = pd.to_datetime(df['date_start'])
# 提取年份列,方便后续分组操作
df['year'] = df['date_start'].dt.year
  1. 定义分箱函数
    该函数会针对每个年份组单独计算分箱边界,生成8个等分区间:
def bin_yearly_data(group):
    # 获取当前年份组count_per_10k的最小、最大值
    val_min = group['count_per_10k'].min()
    val_max = group['count_per_10k'].max()
    # 生成8个箱的边界(8个箱需要9个分界点)
    bins = np.linspace(val_min, val_max, num=9)
    # 执行分箱,添加新列存储分类结果,同时确保最小值被包含在第一个箱中
    group['count_bin'] = pd.cut(
        group['count_per_10k'],
        bins=bins,
        labels=[f"第{i+1}类" for i in range(8)],
        include_lowest=True
    )
    return group
  1. 按年份分组应用分箱逻辑
# 按年份分组,对每个组执行分箱操作
df_binned = df.groupby('year').apply(bin_yearly_data)

关键说明

  • 每个年份的分箱区间独立计算,不受其他年份数据干扰,能更精准反映当年count_per_10k的分布情况
  • 若无需自定义标签,可去掉labels参数,count_bin列会直接显示区间字符串(如(0.2, 1.5])
  • include_lowest=True用于避免最小值因浮点精度问题落在第一个区间之外

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 19:56:02