如何在Pandas DataFrame中合并指定行并保留原索引至新列
解决方案
核心思路
要解决这两个问题,关键是生成稳定的分组键(让互为逆序的行分到同一组,且不打乱原数据顺序),再通过分组聚合实现索引保留、数值正确求和,同时维持原行顺序。
具体实现步骤
生成统一分组键
互为逆序的列表可以通过「取列表元组与其逆序元组中的较小值」生成唯一分组键,确保逆序对的分组键完全一致。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)分组聚合,解决顺序与索引问题
使用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):直接收集组内所有原索引,生成索引列表列
结果验证
运行后aggregated即为目标结果:互为逆序的行完成合并,original_indices保存原索引集合,genes_count数值正确,行顺序与原数据逻辑一致。
补充说明
如果之前依赖one_zero和zero_one分组,逻辑上无法覆盖逆序对的统一分组,建议替换为上述group_key逻辑,确保分组准确性。若其他列需要特殊合并规则(如合并特征内容),可修改agg中的对应处理函数。
内容的提问来源于stack exchange,提问作者emor
相关产品推荐
相关产品推荐

