Ich habe einen Datenrahmen, der wie folgt aussieht:Pandas: Filtergruppe durch mehrere Bedingungen?
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]')
Ich möchte eine Liste aller IDs erhalten, für die is_local
zu Beginn 2016 wahr war, aber falsch zu Beginn von 2017. I‘ habe durch Gruppierung von ID gestartet:
gp = df.groupby('id')
Dann habe ich versucht, dies durch die zweite diese Bedingungen zu filtern, dass nur (als eine Möglichkeit, die ersten Schritte), aber es ist die Rückkehr aller Gruppen:
gp.apply(lambda x: ~x.is_local & (x.date > '2016-12-31'))
Wie kann ich so filtern, wie ich es brauche?
Dank - wie würde ich diese verwenden, um alle zu erhalten Zeilen, für die 'has_local' zu Beginn des Jahres 2016 True und 2017 False ist? – Richard
Ich konnte nur an eine schmutzige Lösung denken, wo Sie mehrere Bedingungen addieren und sie zusammenfügen. Bearbeitete meine Antwort dementsprechend .. – Mechanic
Ich redigierte auch meine Antwort mit einer anderen Bedingung, um das Jahr bis 2016 und 2017 einzuschränken – Mechanic