Pandas分组取众数后如何一步关联回原始DataFrame
分组众数回写原表的一步实现方法
完全不需要手动编写merge逻辑,利用pandas分组对象的transform方法,就能直接把组内计算的众数逐行关联回原始DataFrame,简洁性和执行效率都优于手动merge的写法。
核心实现代码
# 直接在原DataFrame新增列,存储每个Name对应分组的Numbers列众数 df['group_num_mode'] = df.groupby('Name')['Numbers'].transform( lambda x: pd.Series.mode(x)[0] )
实现逻辑与优势
transform会自动完成结果对齐:每个分组计算出的组级众数,会自动匹配到该组对应的所有原始行位置,最终输出的序列长度和原始DataFrame完全一致,不需要手动指定连接键、连接方式,也不存在索引错位的风险。- 全程没有冗余的中间表生成:不需要像手动merge那样先把分组聚合结果转成独立DataFrame,再做表连接操作,减少了不必要的步骤。
- 计算结果和手动merge完全一致:如果遇到组内存在多个并列众数的场景,依然会按照原有逻辑取排序后的第一个众数值,输出和手动merge的结果没有差异。
注意事项
你之前写的分组代码中.reset_index(False)属于旧版pandas的参数写法,当前新版本pandas中该参数已调整为reset_index(drop=True)。在transform的实现中,完全不需要调用重置索引的操作,自然也不会遇到这类版本兼容问题。
内容的提问来源于stack exchange,提问作者Helen
相关产品推荐
相关产品推荐

