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

如何在Pandas DataFrame中高效对分数分桶并按日期分组

自定义分数分箱分组的高效实现方法

看你现在需要给分数按自定义区间分箱,然后按日期统计每个区间的人数,原来手动累加单个分数列的做法确实繁琐又容易出错,这里有个更简洁高效的实现方式:

示例数据

先还原你的示例数据:

import pandas as pd

data = {
    'Id': [1,2,3,4,5,6,7,8,9,10],
    'Date': ['2018-01-01']*5 + ['2018-01-02']*5,
    'Score': [56,72,91,67,65,75,72,91,82,81]
}
df = pd.DataFrame(data)

实现步骤

1. 定义分箱规则

先明确我们的分箱区间和对应的标签:

# 分箱区间:(-∞,60), [60,80), [80,100]
bins = [-float('inf'), 60, 80, 100]
# 对应区间的显示标签
labels = ['<60', '60-79', '80-100']

2. 给分数列打分箱标签

用pd.cut把每个分数映射到对应的区间标签:

# right=False 表示区间左闭右开,比如60会被分到60-79区间
df['Score_Bin'] = pd.cut(df['Score'], bins=bins, labels=labels, right=False)

3. 按日期统计各区间人数

这里有两种简单的方式实现:

方式一:使用交叉表pd.crosstab

result = pd.crosstab(df['Date'], df['Score_Bin'])
# 确保所有标签列都存在(避免某个区间无数据时列缺失)
result = result.reindex(labels, axis=1)

方式二:使用分组统计groupby + value_counts

result = df.groupby('Date')['Score_Bin'].value_counts().unstack(fill_value=0)
result = result.reindex(labels, axis=1)

最终输出结果

两种方法都会得到你想要的格式:

Date<6060-7980-100
2018-01-01131
2018-01-02023

这个方法的好处是:不管分数范围怎么变,只需要修改bins和labels就能快速调整分箱规则,不用再手动累加几十个分数列,代码更易维护也更不容易出错~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:26:14