我希望了解如何过滤 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 的订单
- 包含产品 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(使用前将#替换为@)