Python中如何按指定索引分组条件合并DataFrame的多行数据
按指定索引分组合并DataFrame行的实现方法
你可以通过给原DataFrame打分组标签后按组聚合的方式实现需求,具体步骤如下:
步骤1:定义分组规则与映射关系
首先把你给出的索引分组整理为嵌套列表,再生成每个原索引对应分组号的映射字典:
import pandas as pd # 定义指定的索引分组 groups = [[0, 1], [2], [3, 4, 5], [6, 7], [8, 9]] # 生成原索引到分组号的映射 group_mapping = {} for group_id, idx_list in enumerate(groups): for idx in idx_list: group_mapping[idx] = group_id
步骤2:为原DataFrame添加分组标签
假设你的原始DataFrame名为df,用原索引匹配映射字典生成分组字段:
df['group'] = df.index.map(group_mapping)
步骤3:按分组聚合完成行合并
根据你对不同列的合并规则自定义聚合逻辑即可:
- 如果是数值类列需要求和、求均值,直接传入对应聚合函数名
- 如果是文本类列需要拼接,自定义lambda函数实现
示例代码(可根据实际需求调整聚合规则):
# 示例1:所有数值列统一按求和合并 new_df = df.groupby('group').sum(numeric_only=True).reset_index(drop=True) # 示例2:不同列使用不同合并规则,比如name列按逗号拼接,value列求和 new_df = df.groupby('group').agg( name=('name', lambda x: ','.join(x)), value=('value', 'sum') ).reset_index(drop=True) # 示例3:所有列取分组内第一个值 new_df = df.groupby('group').first().reset_index(drop=True)
输出的new_df就是按你要求的分组规则合并后的结果,行顺序和你给定的分组顺序完全一致。
内容的提问来源于stack exchange,提问作者PRABHAV GUPTA
相关产品推荐
相关产品推荐

