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

Python实现按课程分组并生成主题二进制列的技术问询

实现步骤与代码

你的现有代码存在循环逻辑混乱的问题(比如嵌套遍历Course ID和Final Code,内部又重复遍历Final Code),而且没有把主题和具体课程关联起来。下面是清晰的实现方案:

1. 加载数据并统一清洗主题标签

先把每个课程的主题标签清洗成规范格式,同时整理成列表:

import pandas as pd
import io
from sklearn.preprocessing import MultiLabelBinarizer

# 加载数据
df = pd.read_csv(io.BytesIO(uploaded['courses.csv']))

# 定义主题清洗函数
def clean_topics(topic_str):
    if not isinstance(topic_str, str):
        return []
    # 分割标签并做基础清洗
    topics = [t.strip().lower() for t in topic_str.split(';')]
    cleaned_topics = []
    for t in topics:
        if t in ["[too ambigious]", "too ambiguous"]:
            cleaned_topics.append("[too ambiguous]")
        elif t == "equity and equality\\":
            cleaned_topics.append("equity and equality")
        elif t in ["[NA]", "N/A"]:
            cleaned_topics.append("NA")
        else:
            cleaned_topics.append(t)
    # 去重同一课程内的重复主题
    return list(set(cleaned_topics))

# 为每个课程生成清洗后的主题列表
df['cleaned_topics'] = df['Final Code'].apply(clean_topics)

2. 合并重复课程

按Course ID合并,把同一课程的所有主题合并后去重:

# 按Course ID分组,合并主题并去重
merged_df = df.groupby('Course ID')['cleaned_topics'].agg(
    lambda x: list(set([item for sublist in x for item in sublist]))
).reset_index()

3. 生成主题二进制列

用MultiLabelBinarizer快速生成1/0格式的主题列,适配大型数据集:

# 初始化多标签二值化器
mlb = MultiLabelBinarizer()
# 生成主题二进制矩阵
topic_matrix = mlb.fit_transform(merged_df['cleaned_topics'])
# 转换为DataFrame,列名为对应的主题
topic_df = pd.DataFrame(topic_matrix, columns=mlb.classes_)

# 如果你有预先确定的49个目标主题,可直接过滤列(示例)
# target_topics = ["主题1", "主题2", ..., "主题49"]
# topic_df = topic_df[target_topics]

# 合并回课程数据
final_df = pd.concat([merged_df, topic_df], axis=1)
# 可删除中间的cleaned_topics列(若不需要保留)
final_df = final_df.drop('cleaned_topics', axis=1)

关键说明

  • 清洗函数统一了主题格式,同时去除单课程内的重复标签
  • groupby合并重复课程时,确保同一课程的主题唯一不重复
  • MultiLabelBinarizer比手动循环高效得多,适合处理大型CSV文件
  • 若49个主题是预先确定的,直接用目标主题列表过滤列即可精准生成所需的49个二进制列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:45:22