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

如何利用指定起止列表对Pandas DataFrame的Measure列分组?

Pandas按指定起止范围分组的实现方法

假设你的DataFrame名为df,包含取值0-100的Measure列,给定start_list = [1, 10, 20, 30]和end_list = [10, 20, 30, 40],以下是两种常见的分组方案:

方案一:不重叠区间分组(边界值仅归属一个组)

如果希望每个数值只属于一个分组(比如10仅归到10-20组,而非同时属于1-10和10-20),可以使用pd.cut()函数快速实现:

步骤1:构造分箱和标签

import pandas as pd

# 组合分箱边界:起始列表 + 最后一个结束值
bins = start_list + [end_list[-1]]
# 生成分组标签,格式如["1-10", "10-20", ...]
group_labels = [f"{s}-{e}" for s, e in zip(start_list, end_list)]

步骤2:执行分组

根据你希望的边界归属调整参数:

  • 若希望左闭右开(区间如[1,10)、[10,20),即10归到下一个组):
df['Group'] = pd.cut(df['Measure'], bins=bins, labels=group_labels, right=False)
  • 若希望左开右闭(区间如(1,10]、(10,20],即10归到当前组),同时确保第一个区间包含起始值1:
df['Group'] = pd.cut(df['Measure'], bins=bins, labels=group_labels, include_lowest=True)

步骤3:按分组聚合(可选)

完成分组后,可以对各组做统计分析,比如计算每组的均值:

grouped_result = df.groupby('Group')['Measure'].mean()

方案二:重叠区间分组(边界值归属多个组)

如果需要让边界值(如10)同时属于对应的两个分组(1-10和10-20),可以通过自定义函数结合apply()实现:

步骤1:定义分组匹配函数

def get_groups(measure_val):
    groups = []
    for s, e in zip(start_list, end_list):
        if s <= measure_val <= e:
            groups.append(f"{s}-{e}")
    return groups if groups else ['其他']  # 不在指定范围内的数值归为"其他"组

步骤2:生成分组列

df['Groups'] = df['Measure'].apply(get_groups)

步骤3:展开多分组数据(可选)

如果需要将每个分组的单独记录展开(方便后续聚合统计),可以使用explode():

expanded_df = df.explode('Groups')
# 按展开后的分组统计数量
expanded_result = expanded_df.groupby('Groups')['Measure'].count()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 09:18:26