使用Python pandas按cluster-1分组取cluster-2最高频次值求助
基于你已有的计数结果的后续操作
你当前得到的分组计数结果是MultiIndex的Series结构,只需按以下步骤处理即可得到目标输出:
# 你的现有代码,得到各cluster-2的出现次数 counts = df.groupby(['cluster-1','cluster-2'])['cluster-2'].count() # 转换为DataFrame并重命名计数列 count_df = counts.reset_index(name='occur_count') # 按cluster-1分组,取每组中出现次数最高的对应行,保留需要的两列结果 result = count_df.loc[count_df.groupby('cluster-1')['occur_count'].idxmax(), ['cluster-1', 'cluster-2']] # 可选:重置索引,让结果更规整 result = result.reset_index(drop=True)
更简便的一步实现方案
如果不需要单独统计频次的中间结果,可以直接调用pandas的众数方法实现需求,代码更简洁:
# 直接按cluster-1分组,提取每组cluster-2的众数(出现频次最高的值) result = df.groupby('cluster-1')['cluster-2'].apply(lambda x: x.mode()[0]).reset_index(name='cluster-2')
特殊场景处理
如果某组cluster-1下存在多个cluster-2值的频次并列最高的情况,上述代码默认返回排序靠前的首个最高频次值。如果需要保留所有并列最高的结果,可以用以下代码:
count_df = df.groupby(['cluster-1','cluster-2']).size().reset_index(name='count') result = count_df[count_df['count'] == count_df.groupby('cluster-1')['count'].transform('max')]
内容的提问来源于stack exchange,提问作者Patrik Novotný
相关产品推荐
相关产品推荐

