首页 > 解决方案 > 将多个条件与数据框 filter() 函数一起使用

问题描述

我正在尝试做这样的事情-

df.groupby('brand').filter(lambda group: (len(group) >= 10) | (group.brand == "ABC") )

将数据框过滤到按 分组时出现 10 次或更多次brand的记录,或者如果记录brand属性与一个特定值匹配,我也想保留这些记录。

似乎我还有很长的路要走,也许filter不能采取多个标准。

标签: python-3.xpandaspandas-groupby

解决方案


(group.brand == "ABC").all()当您希望所有值相等用作条件。否则,在布尔上下文中,引发group['brand']"ABC"bool(group.brand == "ABC")

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

例如,

import numpy as np
import pandas as pd
np.random.seed(2019)
N = 10
df = pd.DataFrame({'brand':np.random.choice(['ABC', 'DEF', 'GHI'], size=N),
                   'val':np.random.randint(4, size=N)})
result = df.groupby('brand').filter(lambda group: (len(group) >= 3)
                                    | (group['brand'] == "ABC").all())
print(result)

产量

  brand  val
0   ABC    0
1   GHI    0
3   ABC    0
4   GHI    1
5   GHI    3
6   ABC    0
8   ABC    2
9   GHI    3

推荐阅读