Pandas GroupBy 过滤

2024-01-26

我希望了解如何过滤 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 但没有产品类型 Z 的订单

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


filter接受一个返回布尔值的可调用对象。该可调用将获取整个组数据帧。如果布尔值是True,数据帧返回。如果False然后什么也没有回来。

Only 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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas GroupBy 过滤 的相关文章

随机推荐