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

如何基于lambda删除DataFrame中符合指定条件的行?

解决DataFrame按动态条件删除行的问题

当然可以实现你的需求,先给你两种可行的方案:一种是pandas官方更推荐的高效写法,另一种就是你想要的类似apply的实现方式,先从你的示例数据说起。

首先先构造你给出的示例DataFrame:

import pandas as pd

data = {
    'F': [0, 1, 2],
    'T': ['0', '', '2'],
    'l': ['0', '1', '']
}
df = pd.DataFrame(data)

方案一:布尔索引+isin(推荐,效率更高)

这种方式不需要用到apply,利用pandas的向量化操作,处理大数据集时速度会快很多。你可以先定义好运行时的空值列表,然后通过布尔条件过滤出需要保留的行:

# 运行时动态定义空值条件
empty_values = ['', 'N/A']

# 保留T和l列的值都不在空值列表里的行
filtered_df = df[(~df['T'].isin(empty_values)) & (~df['l'].isin(empty_values))]

解释一下:

  • df['T'].isin(empty_values)会返回一个布尔Series,标记T列的值是否在空值列表里
  • ~用来取反,也就是筛选出不在空值列表里的行
  • &表示逻辑与,确保T和l列都满足非空条件

运行后得到的结果就是你想要的:

F  T  l
0  0  0  0

方案二:用apply逐行判断(符合你的设想)

如果你确实想用类似apply的写法,也是可以的,通过apply逐行检查条件,保留符合要求的行。不过要注意,这种方式是逐行处理,数据量大的时候效率不如方案一:

empty_values = ['', 'N/A']

# 按行应用lambda函数,返回True的行会被保留
filtered_df = df[df.apply(lambda row: row['T'] not in empty_values and row['l'] not in empty_values, axis=1)]

这里的关键是axis=1,表示对每一行应用lambda函数,lambda函数判断当前行的T和l列是否都不在空值列表里,返回布尔值,最后用这个布尔Series来过滤原DataFrame。

为什么你之前的df.drop.apply写法不行?

df.drop()方法是用来删除指定的行/列,它需要传入行索引、列名或者布尔索引,不能直接在drop上调用apply。正确的思路是先通过apply生成需要保留的行的布尔标记,再用这个标记去过滤原DataFrame,就像上面的方案二那样。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:53:59