2017-04-19 147 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)