根据 groupby() 条件删除 Pandas 数据帧行 [英] Drop pandas dataframe rows based on groupby() condition

查看:100
本文介绍了根据 groupby() 条件删除 Pandas 数据帧行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

输入中有一个熊猫数据框:

There is a pandas dataframe on input:

store_id item_id  items_sold        date
1          1          0        2015-12-28
1          2          1        2015-12-28
1          1          0        2015-12-28
2          2          0        2015-12-28
2          1          1        2015-12-29
2          2          1        2015-12-29
2          1          0        2015-12-29
3          1          0        2015-12-30
3          1          0        2015-12-30

我需要删除包含从未在特定商店中出售过的商品的所有行:数据框中的 (store_id, item_id) 对 (1,1)、(3,1)

I need to drop all rows with items that have never been sold in particular store: pairs (1,1), (3,1) of (store_id, item_id) in the dataframe

我期望的输出如下:

store_id item_id  items_sold        date
1          2          1        2015-12-28
2          2          0        2015-12-28
2          1          1        2015-12-29
2          2          1        2015-12-29
2          1          0        2015-12-29

我已经想出了如何使用 pd.groupby()[].sum() 找到所需的 (store_id, item_id) 对,但仍然坚持删除它们来自初始数据帧

I've figured out how to find required pairs of (store_id, item_id) using pd.groupby()[].sum(), but stuck with dropping them from initial dataframe

推荐答案

这是您想要的吗?

In [30]: df[df.groupby(['store_id', 'item_id'])['items_sold'].transform('sum') > 0]
Out[30]:
   store_id  item_id  items_sold        date
1         1        2           1  2015-12-28
3         2        2           0  2015-12-28
4         2        1           1  2015-12-29
5         2        2           1  2015-12-29
6         2        1           0  2015-12-29

这篇关于根据 groupby() 条件删除 Pandas 数据帧行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆