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

Pandas如何使用嵌套元组对多列组合应用多重过滤规则

问题根因
  1. 你定义的group_mask是集合类型,不是字典,没有对应键值映射关系,且规则的索引顺序错误,应该用(group, gender)组合作为索引键,年龄区间作为值。
  2. map是Pandas Series的专属方法,你直接对df[['group', 'gender']]这个DataFrame调用map自然会报属性不存在的错误。
修正后可运行代码
import pandas as pd

# 带gender的测试数据
data = [['A', 'male', 23], ['D','female',50], ['C','male',32], ['D','male',21], ['D','female',24], ['B','female',20], ['C','male',68], ['A','male',52], ['A','male',41],[ 'D','male',44], ['B','female',29], ['B','female',70], ['B','female',33], ['C','female',56], ['A','female',72]]
df = pd.DataFrame(data, columns = ['group', 'gender', 'age'])

# 修正为 (group, gender) 为键、年龄区间为值的字典结构
group_mask = {
    ('A', 'male'): (20, 30),
    ('B', 'male'): (25, 30),
    ('C', 'male'): (65, 70),
    ('D', 'male'): (40, 50),
    ('A', 'female'): (60, 80),
    ('B', 'female'): (15, 30),
    ('C', 'female'): (50, 60),
    ('D', 'female'): (30, 40)
}

# 将group和gender拼接为元组Series,再映射对应年龄区间
df['range'] = df[['group', 'gender']].apply(tuple, axis=1).map(group_mask)
# 用between方法简化区间判断,逻辑和原来的双条件判断完全等价
df['in_range'] = df['age'].between(df['range'].str[0], df['range'].str[1])

# 过滤结果并删除临时列
df = df[df['in_range']].drop(columns=['range', 'in_range']).reset_index(drop=True)
print(df)
运行输出结果
group  gender  age
0     A    male   23
1     C    male   68
2     D    male   44
3     B  female   20
4     B  female   29
5     C  female   56
6     A  female   72

内容的提问来源于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.07 00:06:04