我希望了解如何过滤groupby对象。
我通过以下方式生成:
groupby = df.groupby(['Order #', 'ProductLine', 'ProductType']).size()
结果是:
Order # ProductLine ProductType QTY
1 A Z 1
Y 1
B X 2
2 A Z 1
Y 1
3 A Y 1
B X 1
我需要过滤掉两个条件:
在上面的示例中,只有订单1才合法。订单2和3将被过滤掉。
答案 0 :(得分:2)
filter
接受一个返回布尔值的callable。可调用将采用整个组数据帧。如果布尔值为True
,则数据帧将返回。如果False
则没有任何回复。
仅限A
def f(df):
v = df.ProductLine.values
return (v == 'A').all()
df.groupby(['Order #', 'ProductLine', 'ProductType']).filter(f)
A
而非Z
def f(df):
v = df.ProductLine.values
return ('A' in v) and ('Z' not in v)
df.groupby(['Order #', 'ProductLine', 'ProductType']).filter(f)