Pandas按ID合并重复行并为每组数据生成Result、Date新列的方法
pandas按ID合并重复行生成多列的实现方案
实现思路
核心通过groupby生成组内序号,再配合透视表展开实现需求,该方法支持每个ID对应任意条数的记录,会自动生成对应数量的ResultX、DateX列,适配性强。
完整实现代码
import pandas as pd # 1. 构造示例DataFrame df = pd.DataFrame({ 'ID': [1, 1, 2, 2], 'Gender': ['M', 'M', 'F', 'F'], 'Result': ['Pos', 'Pos', 'Neg', 'Pos'], 'Date': [1, 10, 5, 7] }) # 2. 为每个ID分组生成组内序号(从1开始计数) df['group_idx'] = df.groupby('ID').cumcount() + 1 # 3. 透视表展开字段 res = df.pivot_table( index=['ID', 'Gender'], columns='group_idx', values=['Result', 'Date'], aggfunc='first' ) # 4. 调整列名格式 res.columns = [f'{col[0]}{col[1]}' for col in res.columns] # 5. 重置索引并调整列顺序为目标格式 res = res.reset_index() col_order = ['ID', 'Gender'] for num in range(1, df['group_idx'].max() + 1): col_order.extend([f'Result{num}', f'Date{num}']) res = res[col_order]
输出结果
执行后res的结构完全匹配需求:
| ID | Gender | Result1 | Date1 | Result2 | Date2 |
|---|---|---|---|---|---|
| 1 | M | Pos | 1 | Pos | 10 |
| 2 | F | Neg | 5 | Pos | 7 |
内容的提问来源于stack exchange,提问作者Armanten
相关产品推荐
相关产品推荐

