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

使用groupby统计DataFrame分组计数,如何生成指定格式列?

解决方案

核心思路

你需要先统计每个(Release, Mapping)组合的条目数,再按Release聚合,将每个Mapping与其计数拼接成字符串列。你的原代码得到多级索引是因为groupby(['Release', 'Mapping'])后,这两列会成为结果的索引而非普通列,后续无法直接按Release合并字符串。

方法一:分步实现(清晰易懂)

先计算每个组合的计数并转为普通列,再按Release拼接:

# 第一步:统计每个(Release, Mapping)的计数,重置索引避免多级索引
count_details = df.groupby(['Release', 'Mapping'])['Coding'].count().reset_index(name='count')

# 第二步:按Release分组,拼接Mapping和对应计数
final_result = count_details.groupby('Release').apply(
    lambda group: ', '.join([f"{row['Mapping']}:{row['count']}" for _, row in group.iterrows()])
).reset_index(name='Mapping_Counts')

方法二:一步到位(更简洁高效)

直接在Release分组内对Mapping做频次统计并拼接,省去中间步骤:

final_result = df.groupby('Release').apply(
    lambda group: ', '.join([f"{mapping}:{count}" for mapping, count in group['Mapping'].value_counts().items()])
).reset_index(name='Mapping_Counts')

方法三:自定义聚合函数(可读性更强)

如果需要更清晰的代码结构,可以封装拼接逻辑为函数:

def combine_mapping_with_count(group):
    # 统计当前Release下各Mapping的计数
    mapping_counts = group['Mapping'].value_counts()
    # 拼接成指定格式的字符串
    return ', '.join([f"{m}:{c}" for m, c in mapping_counts.items()])

final_result = df.groupby('Release').agg(Mapping_Counts=combine_mapping_with_count).reset_index()

原代码问题说明

你使用的df.groupby(['Release', 'Mapping'])['Coding'].agg(count='count')会生成以Release和Mapping为多级索引的DataFrame,此时无法直接对Release做进一步的字符串聚合。需要通过reset_index()将这两个索引列转为普通数据列,才能继续后续操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 21:35:00