Pandas分组取每组首行并给全表result字段赋值的实现问题
实现方案
方案1(推荐,更简洁高效)
不需要单独提取分组首行,排序后直接通过分组累计计数实现赋值:
# 你原有的排序逻辑 df = df.sort_values(["id","name","value_1","value_2"], ascending=True) # 直接生成result字段:分组内第一行赋值1,其余为0 df['result'] = df.groupby(["id","name","value_1","value_2"]).cumcount().eq(0).astype(int)
逻辑说明:groupby.cumcount()会从0开始给每个分组内的行按顺序编号,分组第一行的编号就是0,用eq(0)判断后转整数,刚好得到1和0的结果。
方案2(适配你现有已生成first_row_per_group的场景)
如果你已经完成了首行的result=1赋值,可以通过合并+空值填充实现全表赋值:
# 给首行结果集重置索引,保证分组键是普通列用于后续合并 first_row_per_group = first_row_per_group.reset_index()[["id","name","value_1","value_2", "result"]] # 左合并回原df,非首行的result字段会返回NaN,直接填充0即可 df = df.merge( first_row_per_group, on=["id","name","value_1","value_2"], how="left" ).fillna({"result": 0}) # 可选:将result转换为整数类型 df["result"] = df["result"].astype(int)
内容的提问来源于stack exchange,提问作者user3447653
相关产品推荐
相关产品推荐

