I die folgende pd.DataFrame
Groupby und any() | Alle()
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
haben, wobei jeder Eintrag ein Auftrag ist, mit Werten für ORDER_ID
, DATE
, UID
und ACQ
(gibt an, ob dies für den zugeordneten UID
im Datensatz erster Ordnung) .
Ich versuche, alle Bestellungen zu filtern und zu behalten, die von Benutzern platziert wurden, die ihre erste Bestellung innerhalb des im Datensatz angegebenen Zeitraums getätigt haben (d. H. Mindestens eine der Bestellungen dieser Benutzer erfüllt ACQ == True
).
So würde die gewünschte Ausgabe sein:
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
und ich habe zu erreichen dies verwaltet von:
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
Allerdings, wenn ich versuche, alle Aufträge zu finden, die von den Benutzern gestellt wurden die ihre erste Bestellung außerhalb des im Datensatz angegebenen Zeitraums getätigt haben (dh alle ihre Bestellungen sollten ACQ == False
erfüllen) Ich scheine verloren zu sein. Ich habe dies versucht:
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
Wie soll ich alle Ausfiltern gehen über die von den Benutzern erteilten Aufträge, die alle ihre Aufträge ACQ == False
erfüllen müssen?
Alle Ideen werden sehr geschätzt, danke!
Das war hilfreich, danke für den Tipp! – Thanos