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

基于多条件高效分组DataFrame并压缩行数据

Pandas分组聚合去重问题解决

问题原因分析

你的代码存在两个核心问题:

  1. 语法不完整(缺少闭合的括号与大括号),可能引发执行异常或错误结果
  2. 使用字符串拼接(, .join)而非列表存储聚合结果,既不利于后续二次分组操作,也未处理重复值,最终导致数据膨胀和NaN填充问题

分步解决方案

第一步:按Chromosome-Start-End分组并聚合去重列表

先按指定列分组,将对应列聚合为去重后的列表,从根源避免重复值引发的数据膨胀:

import pandas as pd

# 第一步:按Chromosome、Start、End分组,聚合去重的列表
step1_df = df.groupby(['Chromosome', 'Start', 'End']).agg(
    {
        'Start1': lambda x: list(pd.unique(x)),
        'End1': lambda x: list(pd.unique(x)),
        'main_category': lambda x: list(pd.unique(x))
    }
).reset_index()

第二步:拆分列表并按Chromosome-Start1-End1二次分组

将第一步聚合的列表拆分为单行记录,再按新分组键完成去重聚合:

# 拆分Start1、End1、main_category的列表为多行
exploded_df = step1_df.explode(['Start1', 'End1', 'main_category'], ignore_index=True)

# 第二步:按Chromosome、Start1、End1分组,聚合去重的字段
condensed_df = exploded_df.groupby(['Chromosome', 'Start1', 'End1']).agg(
    {
        'main_category': lambda x: ', '.join(pd.unique(x)),  # 若需保留列表格式,替换为list(pd.unique(x))
        'Start': lambda x: ', '.join(pd.unique(map(str, x))),
        'End': lambda x: ', '.join(pd.unique(map(str, x)))
    }
).reset_index()

关键说明

  • 用pd.unique()确保每个分组内的数值无重复,彻底避免数据膨胀
  • 通过explode()拆分列表为单行,再执行二次分组,保证Chromosome-Start-End、Chromosome-Start1-End1-main_category组合完全无重复
  • 可根据需求选择保留列表格式或字符串拼接格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 06:42:11