Tôi có một khung dữ liệu mà trông như thế này:gấu trúc: nhóm lọc theo nhiều điều kiện?
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]')
Tôi muốn có được một danh sách tất cả các ID mà is_local
là Đúng vào lúc bắt đầu của năm 2016, nhưng False vào đầu năm 2017. Tôi' đã bắt đầu theo nhóm bằng ID:
gp = df.groupby('id')
Sau đó, tôi đã cố gắng này chỉ để lọc theo thứ hai của những điều kiện này (như một cách để bắt đầu), nhưng nó trả lại tất cả các nhóm:
gp.apply(lambda x: ~x.is_local & (x.date > '2016-12-31'))
Làm cách nào để lọc theo cách tôi cần?
Cảm ơn - làm thế nào tôi sẽ sử dụng này để có được tất cả hàng mà 'has_local' là True vào đầu năm 2016 và False vào năm 2017? – Richard
Tôi chỉ có thể nghĩ ra một giải pháp bẩn mà u thêm nhiều điều kiện và concat chúng togeother .. Edited câu trả lời của tôi cho phù hợp .. – Mechanic
Tôi cũng đã sửa câu trả lời của tôi với một điều kiện khác để hạn chế năm 2016 và 2017 tương ứng – Mechanic