pandas groupby按pid分组后实现双条件判断(标签计数≥2、首条True时年龄<45)
实现代码
你可以直接在groupby的apply中同时判断两个条件即可,完整代码如下:
# 先确保数据按事件日期升序排列(保证首次出现的label=True是时间最早的记录 a = a.sort_index(level=["pid", "event_date"]) # 分组判断双条件 result = a.groupby("pid").apply( lambda x: (x["label"].sum() >= 2) and (x.loc[x["label"], "age"].iloc[0] < 45) if x["label"].any() else False ).to_frame("label")
逻辑说明
- 第一个判断
x["label"].sum() >=2沿用你原有的逻辑,判断该pid下label为True的记录数≥2 - 第二个判断
x.loc[x["label"], "age"].iloc[0] < 45:先筛选出该pid下所有label为True的行,取第一条(数据按日期排序后第一条就是时间最早的首次出现记录)对应的age判断是否小于45 - 前置判断
if x["label"].any()是为了避免该pid下完全没有label为True的记录时,iloc[0]取数报错的问题
结果验证
运行上述代码后输出的result结果为:
label pid 1 False 5 True
完全符合预期要求。
内容的提问来源于stack exchange,提问作者Blue482
相关产品推荐
相关产品推荐

