Python pandas:查找分组重复类型并替换为均值的实现疑问
解决方案:替换重复type的count为分组均值
你已经成功筛选出了每个sample下重复出现的type,接下来只需要几步就能完成均值替换的需求,咱们一步步来:
1. 简化思路:无需提前筛选,一步完成替换
其实你可以跳过提前筛选non_uniq的步骤,直接用groupby+transform的组合,自动识别重复分组并替换均值,代码更简洁高效:
# 按sample和type分组,对count列做转换:如果分组长度>1(重复出现)就取均值,否则保留原值 df["count"] = df.groupby(["sample", "type"])["count"].transform( lambda x: x.mean() if len(x) > 1 else x.iloc[0] )
2. 分步拆解(对应你已有的筛选逻辑)
如果你想沿用自己先筛选重复分组的思路,也可以按以下步骤完成:
步骤1:提取需要替换的(sample, type)分组
从你已得到的non_uniq中提取重复的分组对:
# 获取所有需要替换的(sample, type)组合 target_groups = non_uniq.index.tolist()
步骤2:计算目标分组的count均值
针对这些分组计算均值:
# 计算目标分组的均值,得到多级索引的Series group_means = df.groupby(["sample", "type"])["count"].mean().loc[target_groups]
步骤3:替换原DataFrame的对应值
通过apply匹配分组并替换:
df["count"] = df.apply( lambda row: group_means.loc[(row["sample"], row["type"])] if (row["sample"], row["type"]) in target_groups else row["count"], axis=1 )
验证输出
无论用哪种方法,最终都会得到你预期的结果:
| sample | type | count |
|---|---|---|
| sample1 | red | 6 |
| sample1 | green | 3 |
| sample2 | red | 2 |
| sample2 | green | 6 |
| sample3 | red | 4 |
| sample3 | blue | 5 |
内容的提问来源于stack exchange,提问作者lindak
相关产品推荐
相关产品推荐

