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

如何按特定分箱过滤DataFrame行?基于分箱频率筛选实例

Pandas分箱筛选高频分箱数据的实现方案

我来一步步帮你搞定这个需求,咱们从准备数据到最终筛选,每一步都讲清楚:


步骤1:准备示例DataFrame

首先先把你提供的数据转换成Pandas的DataFrame,方便后续操作:

import pandas as pd

# 构建你给出的数据集
data = {
    'col1': [15, 17, 14, 20, 21, 19, 18, 20, 22, 21, 22, 25, 21],
    'col2': [2, 4, 5, 10, 11, 11, 12, 6, 7, 8, 8, 6, 7]
}
df = pd.DataFrame(data)

步骤2:对col2进行分箱并统计频率

按照你要求的分箱区间(0,5]、(5,10]、(10,15],我们用pd.cut()把col2的值分到对应的区间里,再用value_counts()统计每个分箱的出现次数:

# 定义分箱的边界值,对应你要的三个区间
bins = [0, 5, 10, 15]
# 对col2分箱并统计每个分箱的频率
bin_frequency = pd.value_counts(pd.cut(df['col2'], bins=bins))

运行后你会得到这样的结果:

(5, 10]     7
(10, 15]    4
(0, 5]      2
Name: col2, dtype: int64

能看到频率最高的两个分箱是(5,10]和(10,15]。

步骤3:提取高频分箱并筛选原数据

接下来我们提取前两个高频分箱的标签,再用isin()过滤原DataFrame中col2属于这两个分箱的行:

# 获取频率最高的前2个分箱
top_two_bins = bin_frequency.nlargest(2).index.tolist()

# 筛选出col2落在这两个分箱里的行
filtered_df = df[pd.cut(df['col2'], bins=bins).isin(top_two_bins)]

最终结果

打印filtered_df就能得到你想要的筛选后的数据:

col1  col2
3     20    10
4     21    11
5     19    11
6     18    12
7     20     6
8     22     7
9     21     8
10    22     8
11    25     6
12    21     7

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:32:37