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

Python DataFrame删除含指定值行并提取对应ID的方法问询

解决DataFrame删除含指定值的行并提取对应ID的问题

我来帮你搞定这个需求,其实步骤很清晰,咱们一步步实现:

1. 核心思路

我们需要先识别出包含'-1_-1_-1'的行,然后提取这些行的id,最后从原DataFrame中移除这些行。

2. 完整代码实现

假设你已经导入了pandas并加载了DataFrame(命名为df),完整代码如下:

import pandas as pd

# 先构造你提供的测试数据(如果已有df可跳过这部分)
data = {
    'id': ['a', 'b', 'c', 'd', 'e', 'f'],
    'a': ['23_2_1', '3_55_0', '-1_-1_-1', '34_55_0', '34_55_0', '34_55_0'],
    'b': ['34_55_0', '34_55_0', '34_55_0', '-1_-1_-1', '34_55_0', '34_55_0'],
    'c': ['34_55_0', '34_55_0', '34_55_0', '34_55_0', '34_55_0', '34_55_0'],
    'd': ['-1_-1_-1', '34_55_0', '34_55_0', '34_55_0', '34_55_0', '34_55_0'],
    'e': ['34_55_0', '34_55_0', '-1_-1_-1', '34_55_0', '34_55_0', '34_55_0']
}
df = pd.DataFrame(data)

# 步骤1:生成布尔掩码,标记包含'-1_-1_-1'的行
mask = df.isin(['-1_-1_-1']).any(axis=1)

# 步骤2:提取包含目标值的行对应的id
bad_ids = df.loc[mask, 'id'].tolist()

# 步骤3:删除包含目标值的行,得到清理后的DataFrame
clean_df = df[~mask].reset_index(drop=True)

3. 代码细节解释

  • df.isin(['-1_-1_-1']):生成一个和原DataFrame形状一致的布尔矩阵,每个元素标记对应位置的值是否等于目标字符串;
  • .any(axis=1):按行做判断,只要该行有任意一个位置匹配目标值,就返回True,最终得到标记待删除行的布尔序列;
  • df.loc[mask, 'id'].tolist():通过掩码筛选出需要提取的id,转成列表方便后续使用;
  • ~mask对掩码取反,筛选出不包含目标值的行,reset_index(drop=True)是为了重置清理后DataFrame的索引,让它更规整。

4. 测试结果

针对你给出的示例数据,运行后:

  • bad_ids会得到 ['a', 'c', 'd'](这三个id对应的行都包含'-1_-1_-1');
  • clean_df会保留id为b、e、f的行,这些行里完全没有目标值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:24:46