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

如何将Pandas时间表DataFrame转换为指定的小时列格式?

实现时间表DataFrame的行列转换(Pandas)

没问题,完全可以生成你想要的格式的DataFrame,用Pandas的透视表功能就能轻松实现。下面是具体的步骤和代码:

第一步:整理原始数据成结构化DataFrame

你提供的原始数据是扁平的文本格式,首先需要把它转换成标准的结构化DataFrame,包含day(星期)、hour(小时)、subjectid(课程ID)、facultyid(教师ID)这四列。我已经帮你把原始数据整理成了结构化列表,直接转成DataFrame即可:

import pandas as pd

# 整理好的结构化数据列表
data = [
    {"day": "mon", "hour": 1, "subjectid": "4CCI02", "facultyid": 5},
    {"day": "mon", "hour": 2, "subjectid": "FR", "facultyid": 42},
    {"day": "mon", "hour": 3, "subjectid": "4CS01", "facultyid": 39},
    {"day": "mon", "hour": 4, "subjectid": "4MAT2", "facultyid": 46},
    {"day": "mon", "hour": 5, "subjectid": "4CCI01", "facultyid": 29},
    {"day": "mon", "hour": 6, "subjectid": "4MAT2", "facultyid": 46},
    {"day": "mon", "hour": 7, "subjectid": "4CCI04", "facultyid": 47},
    {"day": "mon", "hour": 8, "subjectid": "4CCI03", "facultyid": 21},
    {"day": "tue", "hour": 1, "subjectid": "MC03", "facultyid": 48},
    {"day": "tue", "hour": 2, "subjectid": "FR", "facultyid": 42},
    {"day": "tue", "hour": 3, "subjectid": "4CCI04", "facultyid": 47},
    {"day": "tue", "hour": 4, "subjectid": "4CCI02", "facultyid": 5},
    {"day": "tue", "hour": 5, "subjectid": "4MAT2", "facultyid": 46},
    {"day": "tue", "hour": 6, "subjectid": "4MAT2", "facultyid": 46},
    {"day": "tue", "hour": 7, "subjectid": "4CCI01", "facultyid": 29},
    {"day": "tue", "hour": 8, "subjectid": "4CS01", "facultyid": 39},
    {"day": "wed", "hour": 1, "subjectid": "4CCI01", "facultyid": 29},
    {"day": "wed", "hour": 2, "subjectid": "4MAT2", "facultyid": 46},
    {"day": "wed", "hour": 3, "subjectid": "4CCI02", "facultyid": 5},
    {"day": "wed", "hour": 4, "subjectid": "4CCI04", "facultyid": 47},
    {"day": "wed", "hour": 5, "subjectid": "4MAT2", "facultyid": 46},
    {"day": "wed", "hour": 6, "subjectid": "FR", "facultyid": 42},
    {"day": "wed", "hour": 7, "subjectid": "4CCI03", "facultyid": 21},
    {"day": "wed", "hour": 8, "subjectid": "4CS01", "facultyid": 39},
    {"day": "thu", "hour": 1, "subjectid": "4CS01", "facultyid": 39},
    {"day": "thu", "hour": 2, "subjectid": "4MAT2", "facultyid": 46},
    {"day": "thu", "hour": 3, "subjectid": "4CCI02", "facultyid": 5},
    {"day": "thu", "hour": 4, "subjectid": "4MAT2", "facultyid": 46},
    {"day": "thu", "hour": 5, "subjectid": "4CCI01", "facultyid": 29},
    {"day": "thu", "hour": 6, "subjectid": "MC03", "facultyid": 48},
    {"day": "thu", "hour": 7, "subjectid": "FR", "facultyid": 42},
    {"day": "thu", "hour": 8, "subjectid": "4CCI03", "facultyid": 21},
    {"day": "fri", "hour": 1, "subjectid": "4CS01", "facultyid": 39},
    {"day": "fri", "hour": 2, "subjectid": "4CCI02", "facultyid": 5},
    {"day": "fri", "hour": 3, "subjectid": "4MAT2", "facultyid": 46},
    {"day": "fri", "hour": 4, "subjectid": "4CCI03", "facultyid": 21},
    {"day": "fri", "hour": 5, "subjectid": "4CCI04", "facultyid": 47},
    {"day": "fri", "hour": 6, "subjectid": "4MAT2", "facultyid": 46},
    {"day": "fri", "hour": 7, "subjectid": "FR", "facultyid": 42},
    {"day": "fri", "hour": 8, "subjectid": "4CCI01", "facultyid": 29},
    {"day": "sat", "hour": 1, "subjectid": "MC03", "facultyid": 48},
    {"day": "sat", "hour": 2, "subjectid": "4MAT2", "facultyid": 46},
    {"day": "sat", "hour": 3, "subjectid": "4CCI04", "facultyid": 47},
    {"day": "sat", "hour": 4, "subjectid": "4CCI03", "facultyid": 21},
    {"day": "sat", "hour": 5, "subjectid": "4CCI01", "facultyid": 29},
    {"day": "sat", "hour": 6, "subjectid": "4MAT2", "facultyid": 46},
    {"day": "sat", "hour": 7, "subjectid": "4CS01", "facultyid": 39},
    {"day": "sat", "hour": 8, "subjectid": "FR", "facultyid": 42},
]

# 转换成DataFrame
df = pd.DataFrame(data)

第二步:重塑数据为目标格式

接下来我们用Pandas的pivot方法来实现行列转换,把小时作为列,星期作为行,单元格内容是课程ID和教师ID的组合:

# 合并subjectid和facultyid为一个单元格内容
df['class_info'] = df['subjectid'] + ' ' + df['facultyid'].astype(str)

# 透视表转换:行是day,列是hour,值是合并后的课程信息
pivoted_df = df.pivot(index='day', columns='hour', values='class_info')

# 把列名转换成字符串(默认是整数,转成字符串更符合你的需求)
pivoted_df.columns = pivoted_df.columns.astype(str)

# 查看最终结果
print(pivoted_df)

运行这段代码后,你得到的DataFrame就会是你想要的格式:行是星期几,列是1-8小时,每个单元格对应该时段的课程和教师信息。

补充说明

如果你的原始DataFrame不是我们构造的这种结构化格式,而是类似你提供的扁平文本,那你需要先做数据清洗:遍历原始文本,识别每个星期的起始行,然后把对应的小时、课程ID、教师ID一一对应起来,转换成结构化的四列DataFrame,之后再执行上面的透视表步骤即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:45:15