Python—按类别获取第一行的开始日期和最后一行的结束日期

Python—按类别获取第一行的开始日期和最后一行的结束日期,python,Python,假设我有学生列表上的以下数据,他们上过的大学,他们修过的模块,以及模块的开始和结束日期(“结束日期”的一些空值表示课程仍在进行): 学生 大学 模块 上课日期 课程结束日期 万达 泽维尔天才学校 遥控 2018年1月2日 2018年2月5日 万达 泽维尔天才学校 心灵感应 2018年2月6日 2018年4月10日 万达 复仇者大学 航班 2018年5月1日 2018年6月30日 视野 复仇者大学 航班 2018年5月1日 2018年6月30日 视野 复仇者大学 密度操纵 2018年7月1日 人类

假设我有学生列表上的以下数据,他们上过的大学,他们修过的模块,以及模块的开始和结束日期(“结束日期”的一些空值表示课程仍在进行):

学生 大学 模块 上课日期 课程结束日期 万达 泽维尔天才学校 遥控 2018年1月2日 2018年2月5日 万达 泽维尔天才学校 心灵感应 2018年2月6日 2018年4月10日 万达 复仇者大学 航班 2018年5月1日 2018年6月30日 视野 复仇者大学 航班 2018年5月1日 2018年6月30日 视野 复仇者大学 密度操纵 2018年7月1日 人类火炬 梦幻四学校 航班 2018年1月2日 2018年4月4日
您可以直接使用
groupby
和命名聚合,然后计算天数:

dg = df.groupby(['Student ', 'University '])[['Start Date of Class ','End Date of Class']].agg(
        {'Start Date of Class ': 'min', 'End Date of Class': 'max'}).reset_index()
dg['No. of Days in School'] = dg['End Date of Class'] - dg['Start Date of Class '] + 1
它给出:

       Student                     University  Start Date of Class  End Date of Class No. of Days in School
0  Human Torch          Fantastic Four School            2018-01-02        2018-04-04               93 days
1       Vision   Avengers Assemble University            2018-05-01        2018-09-30              153 days
2        Wanda   Avengers Assemble University            2018-05-01        2018-06-30               61 days
3        Wanda     Xavier's School for Gifted            2018-01-02        2018-04-10               99 days

谢谢我不知道命名聚合。但是,如果“类的结束日期”有一些空/空值(例如,类仍在进行中),该怎么办?“最长日期”上的聚合将不起作用。抱歉没有在我前面的问题中包含此细节。@user13399233:一个技巧是用日期填充缺少的结束值。如果你想要合理的价值观,可以选择预期的学年结束日期,也可以选择一个遥远的未来日期(超过1年)。然后,将此日期替换为NaT,并且天数大于365天(如果可以有更长的学校周期,则使用10年和3650天)