使用lambda创建过滤器会产生布尔错误

时间:2019-04-19 16:42:01

标签: python pandas filter

我想从payment_type列中过滤出值“ UNK”并返回完整的数据框。我想使用匿名函数。我收到类型错误。

我尝试创建一个单独的函数,但仍然无法使其正常工作。我正在Jupyter Notebooks上运行它

paymentGroups = fareData.groupby("payment_type")

filteredPaymentTypes = paymentGroups.filter(lambda x: 
                                   x["payment_type"].values != 'UNK')

我收到此错误:

TypeError: filter function returned a ndarray, but expected a scalar bool

所需结果是修改后的数据框,在payment_type列中不包含包含“ UNK”的行。

2 个答案:

答案 0 :(得分:0)

当选择条件与某些条件相关时,需要使用groupby进行过滤 整个组的属性,例如某列的平均值(在 当前组)> some_value

但是在您的情况下,选择标准与 当前记录(不在该组中),因此不需要分组。 请改用query,例如:

fareData.query("payment_type != 'UNK'")

编辑

如果出于某些原因您仍要使用分组,请注意在这种情况下 过滤位于分组键(payment_type)上,该键相同 在当前组的每一行中。

因此,筛选条件只能在 当前组的第一行

paymentGroups.filter(lambda x: x['payment_type'].iloc[0] != 'UNK')

答案 1 :(得分:0)

为什么不使用简单的mask过滤掉组前的值?

mask = fareData.payment_type != 'UNK'
fareData = fareData[mask]