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

如何使用元组对pandas DataFrame列按分组规则实现多范围条件过滤

实现逻辑

首先将原分组规则的键值对反转,得到「分组名-年龄区间」的映射表,再判断每行数据的age是否落在对应分组的闭区间内即可,两种常用实现方式如下:

小数据量快速实现(代码简洁)

import pandas as pd

# 原始数据
data = [['A',23], ['D',50], ['C',32], ['D',21], ['D',24], ['B',20], ['C',68], ['A',52], ['A',41],[ 'D',44], ['B',29], ['B',70], ['B',33], ['C',56], ['A',72]]
df = pd.DataFrame(data, columns = ['group', 'age'])
group_mask = {(20, 30): 'A', (25, 30): 'B', (65, 70): 'C', (40, 50): 'D'}

# 反转得到分组到区间的映射
group_to_range = {group: age_range for age_range, group in group_mask.items()}

# 逐行过滤
filtered_df = df[df.apply(
    lambda row: group_to_range[row['group']][0] <= row['age'] <= group_to_range[row['group']][1],
    axis=1
)]

运行后得到的过滤结果如下:

序号groupage
0A23
1D50
6C68
9D44
10B29

大数据量高性能实现(向量化操作)

如果数据量超过10万行,建议用下面的向量化方案,性能比逐行apply高10倍以上:

# 将区间规则转为DataFrame
range_rule = pd.DataFrame([
    (group, low, high) for (low, high), group in group_mask.items()
], columns=['group', 'age_low', 'age_high'])

# 关联规则后过滤
df = df.merge(range_rule, on='group', how='left')
filtered_df = df[(df['age'] >= df['age_low']) & (df['age'] <= df['age_high'])][['group', 'age']]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:54:02