使用groupby.nunique与transform赋值新列时结果不符的问题
问题原因及解决办法
核心原因1:列名拼写错误
你代码里的uniqe_id是拼写错误(正确应为some_id,和你第一次成功调用的列名一致)。拼写错误会导致Pandas无法定位到目标列,触发异常行为,比如返回全量相同的默认值,这是出现“除第一行外其余行重复第一行数值”的直接原因之一。
核心原因2:跨表对齐不匹配
你是将source_table的分组计算结果赋值给另一张表table,如果两张表的disease列分组分布、索引结构不一致,Pandas自动对齐时会出现匹配错误,仅将第一个匹配到的分组值填充到所有行,其余行因无法正确匹配而重复该值。
正确实现方式
方式一:用字典映射(推荐,兼容性更强)
先将分组计算结果转为字典,再通过map方法映射到table的disease列:
# 生成分组唯一ID数的映射字典 unique_id_map = source_table.groupby("disease")["some_id"].nunique().to_dict() # 为table添加新列 table["unique_ids"] = table["disease"].map(unique_id_map)
方式二:修正拼写并强制值赋值
如果确认两张表的disease列完全匹配,可修正拼写后直接取transform结果的数值赋值:
# 修正列名拼写,直接取values避免索引对齐问题 table["unique_ids"] = source_table.groupby("disease")["some_id"].transform("nunique").values
内容的提问来源于stack exchange,提问作者albert180
相关产品推荐
相关产品推荐

