在数据框filter()函数中使用多个条件

时间:2019-02-06 22:40:15

标签: python-3.x pandas pandas-groupby

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

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

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

似乎我还有一段路要走,也许filter不能采用多个条件。

1 个答案:

答案 0 :(得分:0)

当您希望(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