2017-04-19 237 views
1

我期待了解如何筛选GROUPBY对象。大熊猫的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 

我需要过滤掉两个条件:只有产品A包含

  1. 订单
  2. 订单,其中产品A载,但有没有ProductTypež

在上面的例子中,只有顺序1是合法的。订单2和3将被过滤掉。

回答

2

filter需要一个返回boolean值的调用。该可调用将采用整个组数据框。如果布尔是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)