如何按特定分箱过滤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
相关产品推荐
相关产品推荐

