You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对DataFrame按Col A分组并获取对应列计数与最高频项?

DataFrame分组统计:分类总条数与高频项计数实现

问题场景

现有如下DataFrame:

Col ACol B
redcar
redcar
redtruck
redball
bluebus
bluebus
bluebus
bluetruck
bluecar

需要生成目标DataFrame,展示每个Col A分类的总条数(Count A)、分类下出现次数最多的Col B项及其计数(Count B),目标结果如下:

Col ACount ACol BCount B
red4car2
blue5bus3

注:原目标表格中blue的Count B标注为2,实际原始数据中bus出现3次,此处修正为正确值。

已尝试代码

仅能获取分类与对应高频项,缺失总条数和高频项计数:

df2 = df.groupby('Col A')['Col B'].apply(lambda x: x.value_counts().index[0]).reset_index()

解决方案

方法一:自定义聚合函数一次性统计

通过groupby.agg传入自定义函数,一次完成所有统计需求:

import pandas as pd

def group_stats(col_b_series):
    # 统计当前分类的总条数
    count_a = len(col_b_series)
    # 统计Col B的频次
    freq = col_b_series.value_counts()
    # 获取高频项和对应计数
    most_common = freq.index[0]
    count_b = freq.iloc[0]
    # 返回结果Series
    return pd.Series([count_a, most_common, count_b], index=['Count A', 'Col B', 'Count B'])

# 执行分组统计并重置索引
df2 = df.groupby('Col A')['Col B'].agg(group_stats).reset_index()

方法二:分步统计后合并

拆分统计步骤,再合并结果,逻辑更直观:

# 步骤1:统计每个Col A的总条数
count_a_df = df.groupby('Col A').size().reset_index(name='Count A')

# 步骤2:统计每个Col A下Col B的高频项及对应计数
def get_top_b(col_b_series):
    freq = col_b_series.value_counts()
    return pd.Series([freq.index[0], freq.iloc[0]], index=['Col B', 'Count B'])

count_b_df = df.groupby('Col A')['Col B'].apply(get_top_b).reset_index()

# 步骤3:合并两个DataFrame
df2 = pd.merge(count_a_df, count_b_df, on='Col A')

方法三:利用mode简化高频项获取

借助pd.Series.mode直接获取众数,再结合分组统计:

# 统计分类总条数
count_a = df.groupby('Col A').size().rename('Count A')

# 获取每个分类下Col B的众数(高频项)
most_common_b = df.groupby('Col A')['Col B'].agg(lambda x: x.mode()[0]).rename('Col B')

# 统计高频项的出现次数
count_b = df.groupby(['Col A', 'Col B']).size().reset_index(name='Count B')
count_b = count_b.groupby('Col A')['Count B'].max().rename('Count B')

# 合并所有结果
df2 = pd.concat([count_a, most_common_b, count_b], axis=1).reset_index()

内容的提问来源于stack exchange,提问作者MueezK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 17:30:46