J'ai une trame de données qui ressemble à ceci:pandas: filtrez le groupe en fonction de plusieurs conditions?
df = pd.DataFrame([
{'id': 123, 'date': '2016-01-01', 'is_local': True },
{'id': 123, 'date': '2017-01-01', 'is_local': False },
{'id': 124, 'date': '2016-01-01', 'is_local': True },
{'id': 124, 'date': '2017-01-01', 'is_local': True }
])
df.date = df.date.astype('datetime64[ns]')
Je veux obtenir une liste de tous les ID pour lesquels is_local
était vrai au début de 2016, mais faux au début de 2017. I » ai commencé par groupe par ID:
gp = df.groupby('id')
J'ai essayé cela juste pour filtrer la seconde de ces conditions (comme un moyen de commencer), mais il est de retour tous les groupes:
gp.apply(lambda x: ~x.is_local & (x.date > '2016-12-31'))
Comment puis-je filtrer comme j'ai besoin?
Merci - comment pourrais-je utiliser pour obtenir tous les lignes pour lesquelles 'has_local' est True au début de 2016 et False à 2017? – Richard
Je ne pouvais penser qu'à une solution sale où vous ajoutez plusieurs conditions et les concaténiez ensemble .. Edité ma réponse en conséquence .. – Mechanic
J'ai également édité ma réponse avec une autre condition pour limiter l'année à 2016 et 2017 respectivement – Mechanic