Groupby和any()| all()

2024-10-01 13:29:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下pd.DataFrame

In [155]: df1
Out[155]: 
   ORDER_ID    ACQ       DATE UID
2         3  False 2014-01-03   1
3         4   True 2014-01-04   2
4         5  False 2014-01-05   3
6         7   True 2014-01-08   5
7         8  False 2014-01-08   5
9        10  False 2014-01-10   6
0        11  False 2014-01-11   6

其中每个条目都是一个顺序,其值分别为ORDER_IDDATEUIDACQ(指示这是否是数据集中关联的UID的第一个顺序)。在

我试图过滤并保留在数据集中的时间段内发出第一个订单的用户所下的所有订单(即,这些用户的订单中至少有一个满足ACQ == True)。在

因此,期望的输出是:

^{pr2}$

我通过以下方式做到了:

In [156]: df1.groupby('UID').filter(lambda x: x.ACQ.any() == True)
Out[156]: 
   ORDER_ID    ACQ       DATE UID
3         4   True 2014-01-04   2
6         7   True 2014-01-08   5
7         8  False 2014-01-08   5

然而,当我试图找到用户下的所有订单时,他们在数据集所涵盖的时间段之外发出了第一个订单(即,他们的所有订单都应该满足ACQ == False),我似乎迷失了方向。我试过了:

In [159]: df1.groupby('UID').filter(lambda x: x.ACQ.all() == False)
Out[159]: 
   ORDER_ID    ACQ       DATE UID
2         3  False 2014-01-03   1
4         5  False 2014-01-05   3
6         7   True 2014-01-08   5 ## <- This order is an acquisition, therefore all orders with UID == 5 should be filtered out.
7         8  False 2014-01-08   5
9        10  False 2014-01-10   6
0        11  False 2014-01-11   6

我应该如何筛选出所有订单都满足ACQ == False的用户所下的所有订单?在

任何想法都非常感谢,谢谢!在


Tags: 数据用户in订单idfalsetrueuid