我正在尝试做这样的事情-
df.groupby('brand').filter(lambda group: (len(group) >= 10) | (group.brand == "ABC") )
按brand
分组时将数据框过滤到出现10次或多次出现的记录,或者如果记录brand
属性与一个特定值匹配,我也想保留这些值。
似乎我还有一段路要走,也许filter
不能采用多个条件。
答案 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