不同大小的 Python Pandas 细胞

标签 python pandas scheduled-tasks timetable

我目前正在开发一个小项目 (Python 3.6.2),用于根据我从大学网站上抓取的输入自动创建时间表。为了创建时间表和存储约会(以及稍后重新组织它们,以找到“更好”的时间表),我目前使用 Pandas DataFrame 结构并且并不完全满意。我希望约会占用多个单元格。

08:55:00    
09:40:00    
09:50:00    Mod, Spez, Sem
11:30:00    
11:40:00    
13:20:00    
13:30:00    Systemnahe und parallele Programmierung - Ü 01
15:10:00    
15:20:00    
16:00:00    
16:05:00    
16:15:00    Modellierung, Spezifikation und Semantik - Ü 02
17:00:00    
17:55:00    

例如,第一个约会发生在 09:50 到 11:40 之间,因此应该占用这些时段。一个快速的解决方案是将此约会的名称放在它占用的每个时间段中,但这不会感觉和看起来很干净。我想在完成后将其导出到 Excel。 所以我的问题是,我该如何完成这个任务,或者我一直使用 DataFrames 是不是错了?

最佳答案

需要先forward-fill你的数据,然后group by再appoint,最后汇总时间列:

from io import StringIO
import pandas

raw = StringIO("""\
08:55:00;
09:40:00;
09:50:00;Mod, Spez, Sem
11:30:00;
11:40:00;
13:20:00;
13:30:00;Systemnahe und parallele Programmierung - Ü 01
15:10:00;
15:20:00;
16:00:00;
16:05:00;
16:15:00;Modellierung, Spezifikation und Semantik - Ü 02
17:00:00;
17:55:00;
""")

df = (
    pandas.read_table(raw, sep=';', header=None, names=['time', 'appt'], parse_dates=['time'])
        .fillna(method='ffill')
        .assign(offset=lambda df: df['appt'].shift(-1))
        .query('appt == offset')
        .groupby('appt')['time']
        .describe()[['first', 'last']]
        .rename(columns={'first': 'begin', 'last': 'end'})
        .sort_values(by=['begin'])
        .reset_index()
)

这给了我:

                                              appt                begin                  end
0                                   Mod, Spez, Sem  2017-11-21 09:50:00  2017-11-21 11:40:00
1   Systemnahe und parallele Programmierung - Ü 01  2017-11-21 13:30:00  2017-11-21 16:00:00
2  Modellierung, Spezifikation und Semantik - Ü 02  2017-11-21 16:15:00  2017-11-21 17:00:00

关于不同大小的 Python Pandas 细胞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47421043/

相关文章:

python - 用while循环python写阶乘

python - 组合 Python Pandas Dataframe 比 List Append 方法更有效

python-3.x - 将两列的乘积连续添加到一列的累积和中

java - @Scheduled @Transactional lazy init 集合错误 - 没有代理

c++ - 使用 Windows taskschd.msc 编程 C++ Win32 非控制台应用程序,不工作

python - 索引错误: string index out of range pyspark

Python:非常基础,无法弄清楚为什么它不拆分为列出的较大数字而是拆分为单个整数

Pandas read_sql 没有读取所有行

windows - 如何创建任何用户登录系统时运行的计划任务

python - 升级到 macports python 3.5 后安装需要 .so 文件的 python 包时出错