首页 > 解决方案 > Python基于单列添加缺失的行

问题描述

我有一个包含两个感兴趣的列的数据框:一个包含名称的列(对每门课程重复),以及一个包含他们学习或开始的课程名称的列。问题是,如果我按原样使用数据框,如果一个人没有尝试过该课程,他们将根本没有显示该课程的价值,因此我将无法判断谁错过了课程。有没有办法自动生成带有名称的缺失行?其他列可以是 N/A 或其他任何内容。

数据框:

姓名 课程名称 完成日期
标记 数学 2021 年 1 月 1 日
标记 英语 2021 年 2 月 1 日
标记 经济 2021 年 3 月 1 日
大卫 数学 2021 年 7 月 1 日
大卫 英语 2021 年 4 月 1 日
辛迪 数学 2021 年 6 月 1 日
辛迪 英语 2021 年 9 月 1 日
辛迪 经济 2021 年 11 月 1 日

我在找什么:

姓名 课程名称 完成日期
标记 数学 2021 年 1 月 1 日
标记 英语 2021 年 2 月 1 日
标记 经济 2021 年 3 月 1 日
大卫 数学 2021 年 7 月 1 日
大卫 英语 2021 年 4 月 1 日
大卫 经济 不适用
辛迪 数学 2021 年 6 月 1 日
辛迪 英语 2021 年 9 月 1 日
辛迪 经济 2021 年 11 月 1 日

标签: pythonpandas

解决方案


尝试使用pivotstack使用reset_index

>>> df.pivot(*df).stack(dropna=False)[::-1].reset_index(name='Completion Date')
    Name Course Title Completion Date
0   Mark         Math        1/1/2021
1   Mark      English        2/1/2021
2   Mark         Econ        3/1/2021
3  David         Math        7/1/2021
4  David      English        4/1/2021
5  David         Econ             NaN
6  Cindy         Math        6/1/2021
7  Cindy      English        9/1/2021
8  Cindy         Econ       11/1/2021
>>> 

如果您特别希望它是N/A,请尝试:

>>> df.pivot(*df).stack(dropna=False)[::-1].reset_index(name='Completion Date').fillna('N/A')
    Name Course Title Completion Date
0   Mark         Math        1/1/2021
1   Mark      English        2/1/2021
2   Mark         Econ        3/1/2021
3  David         Math        7/1/2021
4  David      English        4/1/2021
5  David         Econ             N/A
6  Cindy         Math        6/1/2021
7  Cindy      English        9/1/2021
8  Cindy         Econ       11/1/2021
>>> 

推荐阅读