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

如何在Pandas DataFrame中删除符合指定条件的行但保留首行?

解决方案:保留符合条件的首行并删除后续匹配行

针对你的需求,我们可以通过两种实用的方式实现,下面分别介绍:

方法一:布尔掩码过滤(高效简洁)

这种方法通过组合条件筛选出需要保留的行:非目标类型的所有行 + 目标类型的首次出现行,处理速度快,适合大型数据集。

代码示例

import pandas as pd

# 构造示例DataFrame
data = {'Type': ['A', 'X', 'X', 'E', 'Y'], 'Count': [4, 33, 5, 51, 7]}
df = pd.DataFrame(data)

# 定义需要保留首行的目标类型
target_types = ['X', 'Y']

# 构造筛选掩码
mask = df['Type'].isin(target_types)
filtered_df = df[~(mask & df['Type'].duplicated(keep='first'))]

print(filtered_df)

输出结果

Type  Count
0    A      4
1    X     33
3    E     51

逻辑解释

  • df['Type'].isin(target_types):标记所有Type为X/Y的行
  • df['Type'].duplicated(keep='first'):标记Type列中重复出现的行(仅保留首次出现的行,后续重复行标记为True)
  • mask & df['Type'].duplicated(...):筛选出既是目标类型又是重复出现的行(这些是我们要删除的)
  • 取反(~)后,就得到了需要保留的行集合

方法二:分组处理(直观易懂)

如果更倾向于按类型分组的逻辑,可以对Type列分组后,针对目标类型只保留首行,其他类型保留全部行:

代码示例

import pandas as pd

data = {'Type': ['A', 'X', 'X', 'E', 'Y'], 'Count': [4, 33, 5, 51, 7]}
df = pd.DataFrame(data)

target_types = ['X', 'Y']

# 分组处理:目标类型取首行,其他类型取全部
result_df = df.groupby('Type', group_keys=False).apply(
    lambda group: group.head(1) if group.name in target_types else group
)

print(result_df)

输出结果

和方法一完全一致:

Type  Count
0    A      4
1    X     33
3    E     51

逻辑解释

  • 按Type列分组后,对每个组判断是否属于目标类型
  • 如果是目标类型,用head(1)只保留第一行;否则保留整个组的所有行
  • group_keys=False避免分组键作为额外列出现,若需要连续索引,可添加reset_index(drop=True)

两种方法都能完美实现你的需求,可根据自己的习惯和数据规模选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 13:48:13