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

Pandas多条件筛选:家庭调查数据合规受访者过滤

正确筛选符合条件的私营部门受访者数据

需求回顾

需要筛选满足以下条件的受访者:

  • 有工作(HASAJOB=1)
  • 至少拥有1份私营部门工作(JOB1=2 或 JOB2=2)
  • 所有私营部门工作均已填报每日时长(若某份工作是私营,则对应HOURS字段不能为999;非私营工作的时长填报情况不做要求)

原代码问题分析

你之前的代码存在两个核心问题:

  1. 引用了上游的hasajob数据框而非当前的work_in_private_sector,导致索引匹配错误
  2. 使用了|(或)逻辑,仅要求至少一份私营工作填报时长,但我们需要的是所有私营工作都填报时长

正确筛选逻辑与代码

我们可以通过反向逻辑实现:先找出「存在未填报时长的私营工作」的行,再排除这些行。

分步实现代码

# 导入模块
import pandas as pd

# 初始化数据
survey = pd.DataFrame({'HASAJOB': [1, 1, 1, 1, 1, 1, 1, 0, 0, 0],
                      'JOB1': [1, 2, 2, 2, 1, 2, 2, None, None, None],
                      'HOURS1': [999, 8, 7, 999, 8, 6, 6, None, None, None],
                      'JOB2': [2, None, 2, None, None, 1, None, None, None, None],
                      'HOURS2': [4, None, 999, None, None, 999, None, None, None, None]
                      })

# 第一步:筛选有工作的受访者
hasajob = survey[survey['HASAJOB'] == 1]
# 第二步:筛选至少有一份私营工作的受访者
work_in_private_sector = hasajob[(hasajob['JOB1'] == 2) | (hasajob['JOB2'] == 2)]

# 定义「私营工作未填报时长」的两个条件
cond1 = (work_in_private_sector['JOB1'] == 2) & (work_in_private_sector['HOURS1'] == 999)
cond2 = (work_in_private_sector['JOB2'] == 2) & (work_in_private_sector['HOURS2'] == 999)

# 排除存在以上任一情况的行,得到最终结果
final_filtered = work_in_private_sector[~(cond1 | cond2)]

最终输出结果

HASAJOB  JOB1  HOURS1  JOB2  HOURS2
0        1   1.0   999.0   2.0     4.0
1        1   2.0     8.0   NaN     NaN
5        1   2.0     6.0   1.0   999.0
6        1   2.0     6.0   NaN     NaN

简洁版一步到位代码

如果想简化步骤,也可以直接合并所有筛选条件:

final_filtered = survey[
    (survey['HASAJOB'] == 1) &
    ((survey['JOB1'] == 2) | (survey['JOB2'] == 2)) &
    ~(
        ((survey['JOB1'] == 2) & (survey['HOURS1'] == 999)) |
        ((survey['JOB2'] == 2) & (survey['HOURS2'] == 999))
    )
]

逻辑说明

  • cond1和cond2分别捕获「第一份工作是私营但未填报时长」「第二份工作是私营但未填报时长」的情况
  • ~(cond1 | cond2)表示排除掉存在以上任一问题的行,确保保留的所有行中,所有私营工作都已填报时长,非私营工作的时长状态不影响筛选结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 03:47:18