过滤groupby对象中的所有行

时间:2019-09-04 20:57:01

标签: python pandas pandas-groupby

我有一个如下数据框

+-----------+------------+---------------+------+-----+-------+
| InvoiceNo | CategoryNo | Invoice Value | Item | Qty | Price |
+-----------+------------+---------------+------+-----+-------+
|         1 |          1 |            77 |  128 |   1 |    10 |
|         1 |          1 |            77 |  101 |   1 |    11 |
|         1 |          2 |            77 |  105 |   3 |    12 |
|         1 |          3 |            77 |  129 |   2 |    10 |
|         2 |          1 |            21 |  145 |   1 |     9 |
|         2 |          2 |            21 |  130 |   1 |    12 |
+-----------+------------+---------------+------+-----+-------+

如果按item_list = [128,129,130]分组后,如果列表'InvoiceNo' &'CategoryNo'中的任何项目存在于该组中,我想过滤整个组。

我想要的输出结果如下

+-----------+------------+---------------+------+-----+-------+
| InvoiceNo | CategoryNo | Invoice Value | Item | Qty | Price |
+-----------+------------+---------------+------+-----+-------+
|         1 |          1 |            77 |  128 |   1 |    10 |
|         1 |          1 |            77 |  101 |   1 |    11 |
|         1 |          3 |            77 |  129 |   2 |    10 |
|         2 |          2 |            21 |  130 |   1 |    12 |
+-----------+------------+---------------+------+-----+-------+

我知道如何使用isin()过滤数据帧。但是,不确定如何使用groupby()

到目前为止,我已经在下面尝试过

import pandas as pd

df = pd.read_csv('data.csv')

item_list = [128,129,130]

df.groupby(['InvoiceNo','CategoryNo'])['Item'].isin(item_list)

但是什么也没发生。请指导我如何解决此问题。

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

Scoped