如何在Pandas DataFrame中新增匹配ID与Category分组special值的新列
方案1:使用映射字典实现(性能更优,适合大数据量)
# 提取所有special行,构建(ID, Category)到对应Value的映射 special_mapping = df[df["Description"].eq("special")].set_index(["ID", "Category"])["Value"].to_dict() # 按行匹配映射生成新列 df["special_value"] = df.apply(lambda row: special_mapping[(row["ID"], row["Category"])], axis=1)
方案2:使用groupby + transform实现(逻辑更直观,适合小数据量)
如果同一个分组内存在多个special行需要取平均值,可以直接调整聚合逻辑:
df["special_value"] = df.groupby(["ID", "Category"])["Value"].transform( lambda group_val: group_val[df.loc[group_val.index, "Description"].eq("special")].mean() )
补充说明
你之前的代码失效大概率是因为分组后部分组内没有special行导致的空值传播问题,以上两种方案都兼容分组内无special行的场景(无对应值时返回NaN)。如果需要对无special值的分组填充默认值,可以在生成列后链式调用fillna(默认值)即可。
内容的提问来源于stack exchange,提问作者user
相关产品推荐
相关产品推荐

