熊猫集团过滤

时间:2017-04-19 20:26:11

标签: pandas

我希望了解如何过滤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. 仅包含产品A的订单
  2. 包含产品A的订单,但没有ProductType Z
  3. 在上面的示例中,只有订单1才合法。订单2和3将被过滤掉。

1 个答案:

答案 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)