我有以下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_ID
,DATE
,UID
和ACQ
(表示这是否是相关{{1}的第一个订单在数据集中)。
我正在尝试过滤并保留已在数据集中涵盖的时间段内完成第一个订单的用户所下的所有订单(即,此类用户的至少一个订单满足UID
)。
因此,所需的输出将是:
ACQ == True
我已经设法通过以下方式实现:
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
但是,当我尝试查找在数据集中涵盖的时间段之外已经完成第一个订单的用户所下的所有订单(即他们的所有订单应该满足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
的用户所下的所有订单?
非常感谢任何想法,谢谢!
答案 0 :(得分:1)
您需要先使用条件,然后添加all
:
print (df1.groupby('UID').filter(lambda x: (x.ACQ == False).all()))
ORDER_ID ACQ DATE UID
2 3 False 2014-01-03 1
4 5 False 2014-01-05 3
9 10 False 2014-01-10 6
0 11 False 2014-01-11 6