2017-04-19 7 views
1

groupbyオブジェクトをフィルタリングする方法を理解しています。パンダグループのフィルタリング

私は介してこれを生成しています:

groupby = df.groupby(['Order #', 'ProductLine', 'ProductType']).size() 

、結果は次のとおりです。唯一の製品Aが含まれている

  1. 受注:

    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 
    

    は、私は2つの条件をフィルタリングする必要があります

  2. 商品Aは含まれていますが、商品がある注文ProductType Z

上記の例では、注文1のみが正当です。注文2と3は除外されます。

答えて

2

filterは、ブール値を返す呼び出し可能コードを取ります。その呼び出し可能オブジェクトは、グループ全体のデータフレームを取ります。ブール値が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) 
関連する問題