Pandas按分组条件赋值生成新列的更优实现方案咨询
实现方案
你可以直接通过Pandas的groupby+transform组合实现需求,无需创建临时表,单行代码即可完成:
针对第一个场景(C列等于0的条件)
代码如下:
df['new_D'] = df.groupby(['A', 'B'])['D'].transform(lambda g: g[df.loc[g.index, 'C'] == 0].iloc[0])
针对第二个验证场景(C列等于'bar'的条件)
仅需要修改transform内的过滤条件即可:
df['new_D'] = df.groupby(['A', 'B'])['D'].transform(lambda g: g[df.loc[g.index, 'C'] == 'bar'].iloc[0])
可选:异常兼容处理
如果存在部分A、B分组下没有符合C列条件的行,你可以扩展逻辑增加默认值兜底,避免索引报错:
# 无匹配时填充pd.NA,你也可以替换为其他默认值比如-1 df['new_D'] = df.groupby(['A', 'B'])['D'].transform( lambda g: g[df.loc[g.index, 'C'] == 'bar'].iloc[0] if any(df.loc[g.index, 'C'] == 'bar') else pd.NA )
内容的提问来源于stack exchange,提问作者Tom S
相关产品推荐
相关产品推荐

