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

在R中为选修课推荐系统生成按Term_Code排序的序列数据的技术求助

解决方案:从交叉表生成按学期排序的课程-成绩序列

嘿,我来帮你搞定这个序列数据生成的问题!要把无学期顺序的交叉表(Table2)转换成按Term_Code排序的Course_Num:Grade序列(也就是你要的Table3),用Python的pandas就能轻松实现,下面是具体的步骤和代码示例:

步骤1:数据结构假设

首先假设你的Table2是宽表结构——每一行对应一个学生的某学期选课记录,列是课程名称,值是对应成绩,同时包含Student_ID(学生ID)和Term_Code(学期代码)字段。示例结构如下:

Student_IDTerm_CodeMath101English101CS101History101
1001202301ABNaNNaN
1001202302NaNNaNA-B+
1002202301B+ABNaN

步骤2:将宽表转成长表

首先把宽表中分散的课程列转换成行,保留学生ID和学期代码,同时过滤掉没有成绩的空值:

import pandas as pd

# 读取你的Table2数据(这里假设已经加载到table2变量中)
# table2 = pd.read_csv("your_table2_data.csv")

# 宽表转长表,提取课程和成绩
long_df = pd.melt(
    table2,
    id_vars=['Student_ID', 'Term_Code'],  # 保留的非课程字段
    var_name='Course_Num',                # 转换后的课程名列名
    value_name='Grade'                    # 转换后的成绩列名
)

# 过滤掉没有成绩的记录(NaN值)
long_df = long_df.dropna(subset=['Grade'])

步骤3:按学生和学期排序

确保每个学生的课程记录是按Term_Code的时间顺序排列的:

# 按学生ID分组,再按学期代码排序
long_df = long_df.sort_values(by=['Student_ID', 'Term_Code'])

如果你的Term_Code是字符串格式(比如"Fall2023"),只要它的命名是按时间逻辑来的(比如年份+学期缩写),排序就会正常生效;如果不是,你可能需要先把Term_Code转换成可排序的格式(比如将"Fall2023"映射为202301,"Spring2024"映射为202402)。

步骤4:生成课程-成绩序列

最后,把每个学生的Course_Num:Grade组合按学期顺序拼接成序列,得到目标的Table3:

# 分组拼接序列
table3 = long_df.groupby('Student_ID').agg(
    Course_Sequence=lambda x: ', '.join(f"{row['Course_Num']}:{row['Grade']}" for _, row in x.iterrows())
).reset_index()

生成的Table3结构会是这样:

Student_IDCourse_Sequence
1001Math101:A, English101:B, CS101:A-, History101:B+
1002Math101:B+, English101:A, CS101:B

如果你的Table2结构和示例有差异(比如Term_Code是和课程绑定的其他形式),可以根据实际情况调整id_vars或者排序逻辑,核心思路就是先转成包含学期的长表,再排序拼接。

内容的提问来源于stack exchange,提问作者Jayanth N Bharadwaj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:06:02