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

如何基于给定列表从现有DataFrame按status筛选生成新DataFrame

实现方案

直接用pandas的isin()布尔索引即可完成过滤,以下是可直接运行的完整代码:

完整代码

import pandas as pd

# 1. 构造原始DataFrame,你可以替换成自己的读入逻辑,比如pd.read_excel/ pd.read_csv
data = [
    [1,2,3,2,5,"Jon","Work"],
    [1,2,5,4,5,"Adam","Work"],
    [9,7,3,9,5,"Adam","Holiday"],
    [3,2,3,4,5,"Anna","Work"],
    [1,4,6,8,5,"Anna","Work"],
    [4,1,6,8,5,"Kate","Off"],
    [2,1,6,1,5,"Jon","Off"]
]
df = pd.DataFrame(data, columns=["x","y","z","x","c","name","status"])

# 2. 定义过滤条件
target_names = ["Jon", "Adam"]
target_status = ["Off", "Work"]

# 3. 先全局过滤name符合要求的记录,减少后续重复计算
valid_df = df[df["name"].isin(target_names)]

# 4. 按status生成对应DataFrame
# 方式一:直接生成单独变量,适合status值少的场景
df_off = valid_df[valid_df["status"] == "Off"]
df_work = valid_df[valid_df["status"] == "Work"]

# 方式二:存入字典统一管理,适合status值较多的场景
# status_df_map = {s: valid_df[valid_df["status"] == s] for s in target_status}
# 调用示例:status_df_map["Off"] 即为df_off

输出验证

打印df_off得到结果:

x  y  z  x.1  c name status
6  2  1  6    1  5  Jon    Off

打印df_work得到结果:

x  y  z  x.1  c  name status
0  1  2  3    2  5   Jon   Work
1  1  2  5    4  5  Adam   Work

注:原始数据有两个重名的x列,pandas会自动将第二个重名列重命名为x.1,属于正常处理逻辑,不影响过滤结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:06:00