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

如何修改Pandas代码实现指定ID顺序、可扩展行列的DataFrame水平重塑

实现方案

以下是最优修改代码,避免了原方案循环拼接的性能问题,同时完美匹配你的两个需求:

import pandas as pd

# 示例数据构造,你有实际df可跳过这部分
df = pd.DataFrame({
    'ID': [3,3,1,1,1,5],
    'Name': ['Luke','Luke','Marcus','Marcus','Marcus','Julia'],
    'Subject': ['Chemistry','Math','Chemistry','Math','History','History'],
    'Grade': [8,7,6,10,9,6]
})

# 自定义参数
codes = [4, 3, 1, 5, 2]
n_group = 4  # 按需调整需要的成绩组数量,示例为4组

# 核心处理逻辑
# 1. 给每个ID下的记录生成组序号
df['group_no'] = df.groupby('ID').cumcount() + 1
# 2. 透视转换为宽表
df_pivot = df.pivot(index='ID', columns='group_no', values=['Name', 'Subject', 'Grade'])
# 3. 合并多级列名为单级格式:列名+组号
df_pivot.columns = [f'{col}{no}' for col, no in df_pivot.columns]
# 4. 生成目标列列表,对齐到指定组数
expected_cols = []
for i in range(1, n_group + 1):
    expected_cols.extend([f'Name{i}', f'Subject{i}', f'Grade{i}'])
df_pivot = df_pivot.reindex(expected_cols, axis=1)
# 5. 按codes顺序对齐ID,缺失ID自动补NaN
df_result = df_pivot.reindex(codes).reset_index(names='ID')

执行print(df_result)即可得到你需要的输出结果。

调整说明

  • 要修改成绩组数量,直接修改n_group参数即可,代码会自动补全对应列的NaN值
  • 要调整输出ID的顺序和范围,直接修改codes列表即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:06:02