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

按DataFrame的ID列去重分组,将同组数据合并至同一行

解决方案

实现思路

要把同一ID对应的多列信息拆分为多组对应列,核心是给每个ID组内的记录添加序号,再通过unstack操作将行数据展开为列,最后整理列名即可。

完整代码示例

假设你的原始DataFrame包含ID、Grade及其他关联列,以下是可直接复用的代码:

import pandas as pd
import numpy as np

# 模拟原始数据(替换成你实际的DataFrame)
df = pd.DataFrame({
    'ID': ['A', 'A', 'B', 'B', 'B'],
    'Grade': [85, 90, 78, 82, 88],
    'Name': ['Alice', 'Alice', 'Bob', 'Bob', 'Bob']
})

# 1. 给每个ID组内的记录添加从1开始的序号
df['seq'] = df.groupby('ID').cumcount() + 1

# 2. 将ID和序号设为双层索引,再unstack展开列
df_grouped = df.set_index(['ID', 'seq']).unstack()

# 3. 重命名列,生成「列名_序号」的格式
df_grouped.columns = [f'{col[0]}_{col[1]}' for col in df_grouped.columns]

# 可选:将ID从索引转回普通列
df_grouped = df_grouped.reset_index()

print(df_grouped)

代码说明

  • groupby('ID').cumcount() + 1:给每个ID下的行分配连续序号(从1开始),标记同一ID下的第n条记录。
  • set_index(['ID', 'seq']).unstack():把ID和序号作为双层索引,再将序号层展开为列,此时列会变成(Grade,1)、(Grade,2)这类多层结构。
  • 列名重命名:将多层列名合并为列名_序号的格式,完全匹配你需要的目标效果。

效果对比

你之前的代码是将Grade合并为列表,而上述方法会直接生成独立的多列(如Grade_1、Grade_2),完全符合目标格式要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 03:45:05