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

如何在Pandas DataFrame中合并指定行并保留原索引至新列

解决方案

核心思路

要解决这两个问题,关键是生成稳定的分组键(让互为逆序的行分到同一组,且不打乱原数据顺序),再通过分组聚合实现索引保留、数值正确求和,同时维持原行顺序。

具体实现步骤

  1. 生成统一分组键
    互为逆序的列表可以通过「取列表元组与其逆序元组中的较小值」生成唯一分组键,确保逆序对的分组键完全一致。

    def get_group_key(lst):
        tpl = tuple(lst)
        reversed_tpl = tuple(reversed(lst))
        return min(tpl, reversed_tpl)
    
    df_unique['group_key'] = df_unique['one_one_3first'].apply(get_group_key)
    
  2. 分组聚合,解决顺序与索引问题
    使用groupby的sort=False参数保证分组后的行顺序与原数据中组首次出现的顺序一致,同时聚合时明确指定各列的处理规则:

    aggregated = df_unique.groupby('group_key', sort=False).agg(
        genes_count=('genes_count', 'sum'),
        original_indices=('index', list),
        # 其他列保留组内首次出现的值,可按需调整
        one_one_3first=('one_one_3first', 'first'),
        zero_zero_3first=('zero_zero_3first', 'first'),
        one_zero=('one_zero', 'first'),
        zero_one=('zero_one', 'first')
    ).reset_index(drop=True)
    
    • sort=False:彻底解决输出行顺序与输入不一致的问题
    • genes_count=('genes_count', 'sum'):合并行求和,非合并行因仅含自身,求和结果与原值一致,解决数值计算错误
    • original_indices=('index', list):直接收集组内所有原索引,生成索引列表列
  3. 结果验证
    运行后aggregated即为目标结果:互为逆序的行完成合并,original_indices保存原索引集合,genes_count数值正确,行顺序与原数据逻辑一致。

补充说明

如果之前依赖one_zero和zero_one分组,逻辑上无法覆盖逆序对的统一分组,建议替换为上述group_key逻辑,确保分组准确性。若其他列需要特殊合并规则(如合并特征内容),可修改agg中的对应处理函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 01:25:01