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

如何在Pandas中按类别将单列转换为多列并重构数据集?

用Pandas转换在线学习平台交互数据集结构

原始数据集

import pandas as pd

df = pd.DataFrame({'id': [1, 1, 1, 2, 2, 3,3], 
                   'activity_type': ['resource', 'url', 'homepage', 'url','homepage','resource','url'],
                   'sum_click': [23,15,2,25,2,16,2],
                   'course':['math', 'physics','math', 'math','physics','math','math'],
                   'final_result':['pass', 'pass', 'pass','pass','fail','pass','pass'],
})

原始数据表格:

idactivity_typesum_clickcoursefinal_result
1resource23mathpass
1url15physicspass
1homepage2mathpass
2url25mathpass
2homepage2physicsfail
3resource16mathpass
3url2mathpass

目标数据集结构

target_df = pd.DataFrame({'id': [1, 1, 2, 2, 3], 
                   'type_resource': [23,0,0,0,16],
                   'type_url': [0,15,25,0,2],
                   'type_homepage':[2,0,0,2,0],
                   'course':['math', 'physics','math','physics','math'],
                   'final_result':['pass', 'pass', 'pass','fail','pass'],
})

目标数据表格:

idtype_resourcetype_urltype_homepagecoursefinal_result
12302mathpass
10150physicspass
20250mathpass
2002physicsfail
31620mathpass

实现方法

可以通过Pandas的pivot_table方法直接实现,核心是将activity_type列转换为新的列名,同时以id、course、final_result作为分组依据,缺失的点击量用0填充:

# 执行透视转换
result_df = df.pivot_table(
    index=['id', 'course', 'final_result'],
    columns='activity_type',
    values='sum_click',
    fill_value=0,
    aggfunc='sum'  # 同一分组下若有重复数据,用sum合并;示例无重复时也可用first
).reset_index()

# 重命名列名,添加type_前缀
result_df.columns = ['id', 'course', 'final_result'] + [f'type_{col}' for col in result_df.columns[3:]]

# 调整列顺序,匹配目标结构
result_df = result_df[['id', 'type_resource', 'type_url', 'type_homepage', 'course', 'final_result']]

print(result_df)

执行后输出的结果与目标数据集完全一致:

id  type_resource  type_url  type_homepage  course final_result
0   1             23         0              2    math         pass
1   1              0        15              0  physics         pass
2   2              0        25              0    math         pass
3   2              0         0              2  physics         fail
4   3             16         2              0    math         pass

说明

  • pivot_table的index参数指定了分组的唯一标识:每个id+course+final_result组合对应一行数据
  • columns参数将activity_type的不同值转为新列
  • fill_value=0确保没有对应交互类型的位置填充0
  • 最后调整列顺序以匹配目标结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:27:08